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

标签 java reflection lambda java-8 method-reference

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

例如

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/

相关文章:

java - gwt suggestbox 不会隐藏在页面滚动上

java - 将对象数组转换为自定义类型数组

python - 在 lambda 函数中设置 numpy 切片

java - 将多个数组缩减为一个列表

java - 在 Eclipse 中使用 java 闭包?

java - 尽管使用了 super 关键字,为什么我的派生类方法没有从基类调用重写方法?

java - Maven:在打包期间执行antrun任务

java - 在 java 反射中发送到 getDeclaredMethod(String, Class[]) 的参数类型

C# 反射,将 MakeGenericMethod 与具有 'new()' 类型约束的方法一起使用

c# - "access to disposed closure"在这里是什么意思?