java methodtype_java基于MethodHandle调用方法
MethodHandle是jdk1.7加入的新特性,可以提供與反射類似的能力,但是其性能上要優于反射
添加測試類
public class MethodHandleTest {
public Object print(Object obj) {
System.out.println(obj);
return obj;
}
}
添加MethodHandle查找方法,MethodType第一個參數是返回類型,其后是參數類型,如果返回為空,則是void.class
MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodType methodType = MethodType.methodType(Object.class, Object.class);
MethodHandle methodHandle = lookup.findVirtual(MethodHandleTest.class, "print", methodType);
分別調用以下方法,可以看到相應的輸出
methodHandle.invoke(new MethodHandleTest(), "test");
Object o = methodHandle.invokeExact(new MethodHandleTest(), (Object) "test");
invoke方法與invokeExact方法的區別是,invokeExact會對方法的返回值,以及入參做類型校驗,如果使用以下調用方式,則會報出異常
methodHandle.invokeExact(new MethodHandleTest(), (Object) "test");
Object o = methodHandle.invokeExact(new MethodHandleTest(), "test");
java.lang.invoke.WrongMethodTypeException: expected (MethodHandleTest,Object)Object but found (MethodHandleTest,String)Object
總結
以上是生活随笔為你收集整理的java methodtype_java基于MethodHandle调用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 中国航天科技集团:实现 3D 打印阀门壳
- 下一篇: 快手怎么开美颜和滤镜直播
