java - 表达一个通用的 `MethodType` 返回类型为任何对象

标签 java java-8 methodhandle

让以下成为我的问题中的一个类:

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/

相关文章:

java - 当我需要使用 Optional.orElseGet() 而不是 Optional.orElse()

java - 将 LambdaMetafactory.metafactory() 用于普通的非静态 getter

java - 结合 MethodHandles.publicLookup() 与 Method.setAccessible(true)

java - Java 在运行时捕获方法的参数

java-8 - 为什么 Java 8 的 ToIntFunction<T> 不扩展 Function<T, Integer>

Java多客户端聊天应用程序-发送消息问题

java - 如何将 forEach 与 slf4j.logger.info 一起使用

Java MethodHandle api 似乎产生了不正确的类型

java - 出现错误 : possible lossy conversion from double to int. ...但我没有使用任何 double ?

java - 最短简洁的可读语法,用于迭代给定范围内的连续数字