【发布时间】:2018-04-20 10:34:28
【问题描述】:
我有以下 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();
}
}
}
它正在产生编译器警告:
类型安全:来自 capture#1-of 的未经检查的强制转换?将对象扩展到 T
如果我这样做,我可以完美地获得确切的 T 对象:
T obj = objects.get(i);
它完全知道的是T型。
为什么我无法创建该类的新实例?我该如何解决?
(我不是在寻找以下类型的响应:'Add @SuppressWarnings("unchecked")')
【问题讨论】:
-
如果将声明更改为
<T extends Foo>,其中Foo是定义newInstance()方法的任何类或接口怎么办? -
我希望它完全通用。没有“福”。我可能会用 List 或 List 或 List
... 等来调用方法。它们之间的关系应该不比扩展 Object.class -
请注意,
Class#newInstance方法 (documentation) 已弃用(从 java 9 开始)。请改用Constructor.newInstance。 -
"为什么我不能创建该类的新实例?"但你是。你只是收到一个警告。