作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如何调用public <T> T doit(Class<T> clazz);
使用 MyClass<String>.class
作为 clazz,我无法实例化或扩展 MyClass。
编辑:'David Winslow' 和 'bmargulies' 的回答是正确的 (MyClass<String>) doit(MyClass.class);
适用于原始问题,但令人惊讶的是,当方法返回时说 MyClass<T>
而不是 T
类型转换将不再编译。
编辑:我已将 List 替换为 MyClass 并将条件添加到我的原始问题中。
最佳答案
使用 List.class
.因为type erasure Java 类的类型参数完全是一个编译时构造 - 即使 List<String>.class
是有效的语法,它将是与 List<Date>.class
相同的完全相同的类等。由于反射本质上是运行时的事情,它不能很好地处理类型参数(如在 Java 中实现的那样)。
如果您想使用 Class 对象(例如)实例化一个新的 List 实例,您可以将该操作的结果强制转换为具有适当的类型参数。
List<String> list = (List<String>)(ArrayList.class.newInstance());
关于java - 如何在 Java 中执行 `MyClass<String>.class`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5207163/
我是一名优秀的程序员,十分优秀!