README.md

jeflect maven-central

Набор утилит, созданных для упрощения взаимодействия с рефлексией и ускорения вызовов методов через прокси.

Начиная работу

Чтобы установить это, вам понадобятся:

  • 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;
    }
}

Создано с помощью

  • Gradle - Управление зависимостями
  • ASM - Генерация динамических прокси

Авторы

  • RomanQed - Основная работа - RomanQed

Лицензия

Этот проект лицензирован под Apache License 2.0 - смотри LICENSE файл для подробностей

Описание

Набор утилит для взаимодействия с рефлексией и её ускорения.

Конвейеры
0 успешных
0 с ошибкой