MethodHandle
的签名或 VarHandle
的类型与实际方法或字段不匹配的情况。
它还会检查提供给 MethodHandle.invoke()
、VarHandle.set()
等等的参数是否与方法签名或字段类型相匹配,否则将导致异常。
示例:
MethodHandle mh = MethodHandles.lookup().findVirtual( MyClass.class, "foo", MethodType.methodType(void.class, int.class)); // 此参数应为 int 值 mh.invoke(myObj, "abc");
// 此参数应为 String.class VarHandle vh = MethodHandles.lookup().findVarHandle( MyClass.class, "text", int.class);
VarHandle vh = MethodHandles.lookup().findVarHandle( MyClass.class, "text", String.class); // 此参数应为 String 值 vh.set(myObj, 42);
2017.2 的新功能