1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-jOOR

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 00:59 60f0849

Обзор

jOOR расшифровывается как jOOR Object Oriented Reflection. Это простая оболочка для пакета java.lang.reflect.

Название jOOR вдохновлено jOOQ, удобным API для построения и выполнения SQL-запросов.

Зависимости

Отсутствуют!

Загрузка

Для использования с Java 9+

<dependency>
  <groupId>org.jooq</groupId>
  <artifactId>joor</artifactId>
  <version>0.9.14</version>
</dependency>

Для использования с Java 8+

<dependency>
  <groupId>org.jooq</groupId>
  <artifactId>joor-java-8</artifactId>
  <version>0.9.14</version>
</dependency>

Для использования с Java 6+

<dependency>
  <groupId>org.jooq</groupId>
  <artifactId>joor-java-6</artifactId>
  <version>0.9.14</version>
</dependency>

Простой пример

// Все примеры предполагают следующий статический импорт:
import static org.joor.Reflect.*;

String world = onClass("java.lang.String") // Как Class.forName()
                .create("Hello World")     // Вызов наиболее подходящего конструктора
                .call("substring", 6)      // Вызов наиболее подходящей функции substring()
                .call("toString")          // Вызов toString()
                .get();                    // Получить обёрнутый объект, в данном случае строку

Абстракция прокси

jOOR также предоставляет доступ к java.lang.reflect.Proxy API простым способом:

public interface StringProxy {
  String substring(int beginIndex);
}

String substring = onClass("java.lang.String")
                    .create("Hello World")
                    .as(StringProxy.class) // Создать прокси для обёрнутого объекта
                    .substring(6);         // Вызвать метод прокси

Компиляция кода на Java во время выполнения

У jOOR есть дополнительная зависимость от модуля java.compiler, и он упрощает доступ к javax.tools.JavaCompiler через следующий API:

Supplier<String> supplier = Reflect.compile(
    "com.example.HelloWorld",
    "package com.example;\n" +
    "class HelloWorld implements java.util.function.Supplier<String> {\n" +
    "    public String get() {\n" +
    "        return \"Hello World!\";\n" +
    "    }\n" +
    "}\n").create().get();

// Печатает "Hello World!"
System.out.println(supplier.get());

Сравнение с обычным java.lang.reflect

Код jOOR:

Employee[] employees = on(department).call("getEmployees").get();

for (Employee employee : employees) {
  Street street = on(employee).call("getAddress").call("getStreet").get();
  System.out.println(street);
}

Тот же пример с обычным отражением в Java:

try {
  Method m1 = department.getClass().getMethod("getEmployees");
  Employee[] employees = (Employee[]) m1.invoke(department);

  for (Employee employee : employees) {
    Method m2 = employee.getClass().getMethod("getAddress");
    Address address = (Address) m2.invoke(employee);

    Method m3 = address.getClass().getMethod("getStreet");
    Street street = (Street) m3.invoke(address);

    System.out.println(street);
  }
}

// Существует множество проверяемых исключений, которые вы, скорее всего, проигнорируете:
catch (Exception ignore) {

  // ... или, может быть, просто обернуть в предпочитаемое исключение времени выполнения:
  throw new RuntimeException(e);
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-jOOR.git
git@api.gitlife.ru:oschina-mirror/mirrors-jOOR.git
oschina-mirror
mirrors-jOOR
mirrors-jOOR
main