让我的问题成为以下类:
class MyClass {
String name() {
return toString();
}
}
我想创建一个MethodType实例,它描述一个返回为“任何”对象的方法.我正在尝试以下方法:
MethodType genericTypeWithObjectReturn =
MethodType.methodType(Object.class, new Class[] {});
然后尝试找到一个使用的方法
MethodHandle mh =
lookup.findVirtual(MyClass.class, "name", genericTypeWithObjectReturn);
使用上面的行,我得到一个例外:
Caused by: java.lang.NoSuchMethodError: MyClass.name()Ljava/lang/Object;
我的观察是方法返回类型应该是完全相同的类型;即我应该在上面的语句中使用String.class来定义MethodType.它是否正确?有没有办法让我能按照我描述的方式做到这一点,最好不要使用反射API?
最佳答案 既然答案仍然缺失……
MethodType必须准确.这是MethodHandles-API中的一个重点,但仅仅因为您控制转换是一些可能的优化.解决方案是使用反射来查找方法,然后使用MethodHandles #rereflect *来获取句柄.