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

标签 java generics lambda

<分区>

我在这里问了一些关于 lambdas 的问题 Java: how to resolve generic type of lambda parameter? , 但这个有点不同。

我有方法签名:

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 更改为内联实现,它看起来并不符合标准。

最佳答案

不,这是不可能的。

你不能得到类似 T.class 的东西,因为泛型在运行时被删除。你真的需要传入 Class<T>能够自己上课。

我也闻到了 XY 问题。也许您真的需要类类型,但没有更多信息,这有点难闻。

关于Java:使用lambda参数获取实际类型的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23865950/

相关文章:

java - 覆盖Java中的抽象泛型方法

java - 如何使用有效的泛型声明 Class.class

c++ - lambda 中的 noexcept 在 vs2012 中如何工作?

Ruby 函数与方法

python - 从 pandas DataFrame 中的日期时间列中提取月份

java - Kie Workbench 从 session 中删除现有事实

java - 如何知道是否对 jtextarea 进行了任何更改?

java - Spring & Java Generics - 在抽象 Controller 中获取一项服务的实例

java - Python 代码比 Java 慢 60 倍

JavaFX 和 FXML 最小化时黑屏