# jOOR **Repository Path**: mirrors/jOOR ## Basic Information - **Project Name**: jOOR - **Description**: jOOR 在java原生的反射基础上进行了简单的封装,使得反射使用方便不少! 举个简单的列子,供大家参考 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: https://www.oschina.net/p/joor - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 2 - **Created**: 2017-11-09 - **Last Updated**: 2025-08-30 ## Categories & Tags **Categories**: utils **Tags**: None ## README ### Overview jOOR stands for jOOR Object Oriented Reflection. It is a simple wrapper for the java.lang.reflect package. jOOR's name is inspired by jOOQ, a fluent API for SQL building and execution. ### Dependencies None! ### Download **For use with Java 9+** ```xml org.jooq joor 0.9.15 ``` **For use with Java 8+** ```xml org.jooq joor-java-8 0.9.15 ``` **For use with Java 6+** ```xml org.jooq joor-java-6 0.9.15 ``` ### Simple example ````java // All examples assume the following static import: import static org.joor.Reflect.*; String world = onClass("java.lang.String") // Like Class.forName() .create("Hello World") // Call most specific matching constructor .call("substring", 6) // Call most specific matching substring() method .call("toString") // Call toString() .get(); // Get the wrapped object, in this case a String ```` ### Proxy abstraction jOOR also gives access to the java.lang.reflect.Proxy API in a simple way: ````java public interface StringProxy { String substring(int beginIndex); } String substring = onClass("java.lang.String") .create("Hello World") .as(StringProxy.class) // Create a proxy for the wrapped object .substring(6); // Call a proxy method ```` ### Runtime compilation of Java code jOOR has an optional dependency on the `java.compiler` module and simplifies access to `javax.tools.JavaCompiler` through the following API: ```java Supplier supplier = Reflect.compile( "com.example.HelloWorld", "package com.example;\n" + "class HelloWorld implements java.util.function.Supplier {\n" + " public String get() {\n" + " return \"Hello World!\";\n" + " }\n" + "}\n").create().get(); // Prints "Hello World!" System.out.println(supplier.get()); ``` ### Comparison with standard java.lang.reflect jOOR code: ````java Employee[] employees = on(department).call("getEmployees").get(); for (Employee employee : employees) { Street street = on(employee).call("getAddress").call("getStreet").get(); System.out.println(street); } ```` The same example with normal reflection in Java: ````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); } } // There are many checked exceptions that you are likely to ignore anyway catch (Exception ignore) { // ... or maybe just wrap in your preferred runtime exception: throw new RuntimeException(e); } ```` ### Similar projects Everyday Java reflection with a fluent interface: * http://docs.codehaus.org/display/FEST/Reflection+Module * http://projetos.vidageek.net/mirror/mirror/ Reflection modelled as XPath (quite interesting!) * http://commons.apache.org/jxpath/users-guide.html