我有以下java示例类:
public class TestClass {
public static <T> void method(List<T> objects) throws Exception {
for (int i = 0; i < objects.size(); i++) {
// Create new object of the same class
T obj = (T) objects.get(i).getClass().newInstance();
}
}
}
Run Code Online (Sandbox Code Playgroud)
它正在产生一个编译器警告:
类型安全:未捕获来自捕获#1的投射?将Object扩展为T.
如果我这样做,我可以完美地获得确切的T对象:
T obj = objects.get(i);
Run Code Online (Sandbox Code Playgroud)
它完全知道是T型.
为什么我无法创建该类的新实例?我该怎么办呢?
(我不是在寻找类型的回复:'添加@SuppressWarnings("未选中")')
Imp*_*Fox 11
这是因为getClass()返回a Class<? extends Object>.你不能(安全地)将通配符转换?为任何东西,甚至不是通用的类类型.这是Java Generics的限制.但由于您可以确定此警告不是问题,因此您可以放心地忽略或禁止它.
但这是一个解决方法,许多应用程序和库执行此操作:
public static <T> void method(List<T> objects, Class<T> clazz) throws Exception {
for (int i = 0; i < objects.size(); i++) {
// Create new object of the same class
T obj = clazz.newInstance();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |