将java Object强制转换为具有已知类型参数

时间:2015-10-16 14:24:35

标签: java generics casting

我有一个像这样的泛型类:

public class Box<T> {
   ...
}

稍后在代码中我想以这种方式将Object转换为Box类:

Box<String> boxString = (Box<String>) object;

但是编译器和IDE在这里发出警告 我可以通过不使用@SuppressWarnings来清楚地避免警告吗?

2 个答案:

答案 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;
    ...
 }