我有一个泛型类是这样的:铸造Java对象泛型类型与已知类型参数
public class Box<T> {
...
}
代码后来我想投一个对象给Box类是这样的:
Box<String> boxString = (Box<String>) object;
但是编译器和IDE在这里发出警告。
可以通过不使用@SuppressWarnings
以某种方式干净地避免警告吗?
我有一个泛型类是这样的:铸造Java对象泛型类型与已知类型参数
public class Box<T> {
...
}
代码后来我想投一个对象给Box类是这样的:
Box<String> boxString = (Box<String>) object;
但是编译器和IDE在这里发出警告。
可以通过不使用@SuppressWarnings
以某种方式干净地避免警告吗?
如果object
的类型是Object
,那么除了加入@SuppressWarnings("unchecked")
之外,您无法避免该警告。
警告并非错误,如果您了解它们,则可以在代码中包含一些代码。
编辑:如注释建议,将"unchecked"
添加到注释中。
具体来说,'@SuppressWarnings(“unchecked”)'。 –
该警告是一件好事。它告诉你,转换的类型参数部分不会在运行时进行类型检查。如果你确定知道它总是有效的演员阵容,那么使用@SuppressWarnings("unchecked")
是合理的。
但是,避免警告比抑制它们要好。
如果您控制稍后需要投射的Box实例的构造,则可以对Box进行子类化,因为它不是最终的。现在
public class BoxString extends Box<String> {
...
}
你可以不投泛型:
if (object instanceof BoxString) {
BoxString boxString = (BoxString) object;
...
}
都能跟得上。 Java有类型擦除,所以泛型不能在运行时检查。唯一真正的解决方案是避免强制转换为Object。 – Nayuki
这个警告是一件好事。它告诉你,转换的类型参数部分不会在运行时进行类型检查。如果你确定知道它总是有效的演员阵容,那么使用'@SuppressWarnings(“unchecked”)'是合理的。 –