Java:使用lambda参数获取实际类型的泛型方法

时间:2014-05-26 08:31:07

标签: java generics lambda

我在lambdas public <P> void handle(Consumer<P> consumer) { ... } 询问了一些问题,但这个问题有点不同。

我有方法签名:

lambda

我可以将其与.<Integer>handle(p -> System.out.println(p * 2));

一起使用
Integer.class

我可以以某种方式解决那个实际的泛型类型吗? 我的意思是我想在handle方法中获得 public <P> void handle(Class<P> pClass, Consumer<P> consumer) {...} .handle(Integer.class, p -> System.out.println(p * 2));

BTW我可以解决这个问题:

{{1}}

但是,如果我们将lambda更改为内联实现,它看起来并不是犹太人。

1 个答案:

答案 0 :(得分:5)

不,这是不可能的。

您无法获得类似T.class的内容,因为泛型会在运行时被删除。你真的需要传递Class<T>才能获得课程本身。

我也闻到了XY问题。也许你真的需要类类型,但如果没有进一步的信息,这有点味道。