【发布时间】:2011-05-27 16:25:50
【问题描述】:
在我的 Java 程序中,我需要将 List<? extends SomeBaseClass> 类型的对象强制转换为 List<SomeBaseClass>。如果我直接转换它,编译器会抱怨(显示警告)存在未经检查的转换。即使我可以确定所有对象都可以转换为它们的超类,编译器不会注意到它并报告未经检查的强制转换。我怎样才能摆脱警告?除了@SupressWarnings("unchecked") 还有其他方法吗?
P.S.:代码运行良好,我只是好奇是否有更好的处理方式。
编辑:
解决方案:如果他确定将来不会更改列表,则应该只进行这种类型的演员表。但是,当我们将单个对象从列表中取出时,最好对它们进行强制转换。
【问题讨论】:
-
作为一般规则,您可以通过不返回通配符类型来减少这些转换的需要。在将通配符类型作为参数的方法中,您应该有很少的地方必须重复通配符(如迭代器变量),并且我确实会重复通配符,所以我不会意外添加到列表中一个未知的亚型。
标签: java casting suppress-warnings unchecked