「Java基礎」Java 反射的幾種方式


「Java基礎」Java 反射的幾種方式

* 初始類

public class ReflectDemo {
//靜態方法
public static Integer myStaticMethod(Integer a, Integer b) {
System.out.println(a+b);
return a + b;
}
//實例方法
public Integer myInstanceMethod(Integer a, Integer b) {
System.out.println(a+b);
return a + b;
}
}

* 傳統方式

ReflectDemo object = new ReflectDemo();
// 方法對象
Method method = object.getClass().getDeclaredMethod("myInstanceMethod", Integer.class, Integer.class);
// 調用(對象實、參數)
method.invoke(object, 1, 1);

* 現代方式

ReflectDemo object = new ReflectDemo();
// MethodHandle 方法句柄
// MethodType 方法簽名(返回值類型、參數類型)
MethodHandle myInstanceMethod = MethodHandles.lookup().findVirtual(ReflectDemo.class, "myInstanceMethod", MethodType.methodType(Integer.class, Integer.class, Integer.class));
// 調用(對象實、參數)
myInstanceMethod.invoke(object, 1, 1);


* 開源工具(JOOR https://github.com/jOOQ/jOOR)

Reflect.on(ReflectDemo.class).create().call("myInstanceMethod", 1, 1).get();


分享到:


相關文章: