让以下成为我的问题中的一个类:
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#unreflect* 获取句柄。
关于java - 表达一个通用的 `MethodType` 返回类型为任何对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21355853/