我有一个像这样的泛型类:
public class Box<T> {
...
}
稍后在代码中我想以这种方式将Object转换为Box类:
Box<String> boxString = (Box<String>) object;
但是编译器和IDE在这里发出警告
我可以通过不使用@SuppressWarnings
来清楚地避免警告吗?
答案 0 :(得分:3)
如果object
的类型为Object
,则除了添加@SuppressWarnings("unchecked")
之外,您无法避免此警告。
警告不是错误,如果你理解它们,你可以在代码中加入一些错误。
编辑:根据评论建议,将"unchecked"
添加到注释中。
答案 1 :(得分:1)
警告是件好事。它告诉你,在运行时不会对类型参数部分进行类型检查。如果你肯定知道它总是有效的演员表,那么使用@SuppressWarnings("unchecked")
是合理的。
但是,避免警告要比抑制它们更好。
如果您控制以后需要强制转换的Box实例的构造,则可以将Box子类化,因为它不是最终的。
public class BoxString extends Box<String> {
...
}
现在你可以在没有泛型的情况下进行投射:
if ( object instanceof BoxString ) {
BoxString boxString = (BoxString) object;
...
}