【发布时间】:2014-05-26 08:31:06
【问题描述】:
我在这里Java: how to resolve generic type of lambda parameter?问了一些关于lambdas的问题,但是这个有点不同。
我有方法签名:
public <P> void handle(Consumer<P> consumer) {
...
}
我可以和lambda一起使用它:
.<Integer>handle(p -> System.out.println(p * 2));
我能以某种方式解决实际的泛型类型吗?
我的意思是我想在 handle 方法中获得 Integer.class。
顺便说一句,我可以这样解决问题:
public <P> void handle(Class<P> pClass, Consumer<P> consumer) {...}
.handle(Integer.class, p -> System.out.println(p * 2));
但是,如果我们将 lambda 更改为内联实现,它看起来并不可靠。
【问题讨论】:
-
没有。否则,您可能会将该主题作为一个有很多问题的主题来结束。他们提供不同的主题并期待不同的答案
-
我不确定这两个问题的区别。
-
老实说我也不明白
-
这是可能的——您只需在将 lambda 传递给
handle之前获取对 lambda 的引用,这样您就可以解析其类的类型参数。例如:TypeResolver.resolveRawArgument(Consumer.class, lambda.getClass());。有关更多使用信息,请参阅TypeTools。 -
@ArtemBilan - 另一种选择是从您的句柄方法内部进行类型解析:
TypeResolver.resolveRawArgument(Consumer.class, consumer.getClass());这应该可以。