关于 MethodHandle 类的两个问题:
是否每次调用 invokeExact() 都需要对返回值进行类型转换(返回 void 或 Object 的目标方法除外)?
似乎 MethodHandle 只能绑定一次到接收器。给定一个任意的 MethodHandle 实例,有没有办法确定它是否已经被绑定,如果是,绑定到什么类型?
public static void main(String[] args) throws Throwable {
MethodHandles.Lookup lookup = MethodHandles.publicLookup();
MethodHandle handle = lookup.bind(new Object(), "toString", MethodType.methodType(String.class));
String s = (String) handle.invokeExact();
System.out.println(s);
try {
handle.invokeExact();
}
catch (WrongMethodTypeException e) {
System.out.println(e);
}
try {
handle.bindTo(new Object());
}
catch (IllegalArgumentException e) {
System.out.println(e);
}
}