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); // Вызвать метод прокси
У 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());
Код 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 )