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

时间:2016-01-16 00:37:35

标签: java reflection lambda java-8 method-reference

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

E.g。

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 btw ......

1 个答案:

答案 0 :(得分:2)

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

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