java - 如何获取构造函数lambda的返回类型

标签 java reflection lambda java-8 method-reference

我想知道是否有可能获得分配给构造函数的供应商的返回类型。

例如。

Supplier<Foo> sFoo = Foo::new;

我如何从供应商那里获得“Foo.class”?我一直在用typetools为其他事情解决这个问题。

这有效,例如:
Supplier<Foo> sFoo = () -> new Foo();
Class<?> fooClasss = net.jodah.typetools.TypeResolver.resolveRawArguments(Supplier.class, sFoo.getClass())[0];
// fooClass == Foo.class

但是,如果我将供应商分配为:Supplier<Foo> sFoo = Foo::new ,返回类型无法解析...

有什么想法吗?顺便说一句,我不必使用 typetools ...

最佳答案

似乎 typeTools 当前不支持解析方法引用。有一个 open issue有类似的问题。

通常,此类功能非常脆弱,因为未指定运行时 lambda 表示并且依赖于实现。所以它可能有一天会破裂。如果你真的需要一个类,我建议通过实际的 Class<?>争论。

关于java - 如何获取构造函数lambda的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34822197/

相关文章:

返回索引0处的值的Python函数?

c# - 如何启动异步线程? [复制]

java - 将 byte[] 转换为图像并在 jsp 上显示

java - 在Android中使用反射

Java:使用接口(interface)参数获取方法及其实现

c# - 如何将对象转换到列表

java - 使用 Google API Java 客户端上传到 YouTube 时出现问题

java - 将客户端数据保存到 Java 对象中。获取 com.fasterxml.jackson.databind.exc.MismatchedInputException

java - log.debug 是否会降低性能

java - 哪里将@SuppressWarnings包含在以Runnable lambda为参数的单行代码中?