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