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

aka*_*xer 5 java reflection lambda java-8 method-reference

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

例如

Supplier<Foo> sFoo = Foo::new;
Run Code Online (Sandbox Code Playgroud)

我如何从供应商处获得"Foo.class"?我一直在使用typetools来解决其他问题.

这有效,例如:

Supplier<Foo> sFoo = () -> new Foo();
Class<?> fooClasss = net.jodah.typetools.TypeResolver.resolveRawArguments(Supplier.class, sFoo.getClass())[0];
// fooClass == Foo.class
Run Code Online (Sandbox Code Playgroud)

但是,如果我分配如下的供应商:Supplier<Foo> sFoo = Foo::new,则无法解析退货类型......

有什么想法吗?我没有必要使用typetools btw ...

Tag*_*eev 2

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

一般来说,这样的功能非常脆弱,因为运行时 lambda 表示没有指定并且依赖于实现。所以说不定有一天会坏掉。如果您确实需要一堂课,我建议您传递实际的Class<?>参数。

  • 好吧,它确实处理方法引用,但不处理构造函数引用,因为它偶然发现构造函数的字节码签名具有“void”返回类型(因此,构造函数需要特殊处理)。然而,你是对的,这确实是一种黑客行为,不值得考虑。 (2认同)