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 的新功能