* 初始類
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();
閱讀更多 碼向未來 的文章