2 года назад
История
README.md
jeflect
Набор утилит, созданных для упрощения взаимодействия с рефлексией и ускорения вызовов методов через прокси.
Начиная работу
Чтобы установить это, вам понадобятся:
- java 8+
- Maven/Gradle
Возможности
- Получение значений из аннотаций
- Упаковка методов с помощью прокси
- Упаковка методов с помощью мета-лямбд
Установка
Gradle-зависимость
dependencies {
implementation group: 'com.github.romanqed', name: 'jeflect', version: 'LATEST'
}
Maven-зависимость
<dependency>
<groupId>com.github.romanqed</groupId>
<artifactId>jeflect</artifactId>
<version>LATEST</version>
</dependency>
Примеры
Упаковка метода с использованием мета-лямбд
import com.github.romanqed.jeflect.ReflectUtil;
import java.util.concurrent.Callable;
public class Main {
public static void main(String[] args) throws Throwable {
Callable<String> packed = ReflectUtil.packCallable(ToPack.class.getMethod("packMe"), new ToPack());
System.out.println(packed.call());
}
public static class ToPack {
public String packMe() {
return "Hello, I'm packed!";
}
}
}
Упаковка метода с использованием Lambda-прокси
import com.github.romanqed.jeflect.Lambda;
import com.github.romanqed.jeflect.ReflectUtil;
public class Main {
public static void main(String[] args) throws Throwable {
Lambda packed = ReflectUtil.packMethod(ToPack.class.getMethod("packMe"), new ToPack());
System.out.println(packed.call(new Object[0]));
}
public static class ToPack {
public String packMe() {
return "Hello, I'm packed!";
}
}
}
Упаковка метода с использованием кастомной лямбды
import com.github.romanqed.jeflect.ReflectUtil;
import com.github.romanqed.jeflect.meta.LambdaClass;
public class Main {
public static void main(String[] args) throws Throwable {
LambdaClass<MyLambda> clazz = LambdaClass.fromClass(MyLambda.class);
MyLambda lambda = ReflectUtil.packLambdaMethod(clazz, Main.class.getDeclaredMethod("toPack", int.class), new Main());
System.out.println(lambda.increment(0));
}
public int toPack(int number) {
return number + 1;
}
public interface MyLambda {
int increment(int number);
}
}
Упаковка метода с использованием LambdaMethod-прокси
import com.github.romanqed.jeflect.LambdaMethod;
import com.github.romanqed.jeflect.ReflectUtil;
public class Main {
public static void main(String[] args) throws Throwable {
LambdaMethod lambda = ReflectUtil.packLambdaMethod(Main.class.getDeclaredMethod("toPack", int.class));
System.out.println(lambda.call(new Main(), new Object[]{0}));
}
public int toPack(int number) {
return number + 1;
}
}
Создано с помощью
Авторы
- RomanQed - Основная работа - RomanQed
Лицензия
Этот проект лицензирован под Apache License 2.0 - смотри LICENSE файл для подробностей
Описание
Набор утилит для взаимодействия с рефлексией и её ускорения.
Конвейеры
0 успешных
0 с ошибкой