在我的 Java 程序中,我需要转换 List<? extends SomeBaseClass>
类型的对象至List<SomeBaseClass>
。如果我直接转换它,编译器会提示(显示警告)存在未经检查的转换。尽管我可以确定所有对象都可以转换为其父类(super class),但编译器不会注意到它并报告未经检查的强制转换。我怎样才能摆脱警告?除了@SupressWarnings("unchecked")还有其他方法吗?
P.S.:代码运行良好,我只是好奇是否有更好的方法。
编辑:
解决方案:只有在确定将来不会更改列表时才应该进行这种类型的转换。但当我们将单个对象从列表中取出时,最好对其进行强制转换。
最佳答案
编译器会提示,因为如果您添加 SomeBaseClass
类型的对象给您List<SomeBaseClass>
列表中,您可能会“违反”您的 List<? extends SomeBaseClass>
的内容列表。
这里是一个例子,当Number
时数字为您的 SomeBaseClass
:
List<? extends Number> doubles = new ArrayList<Double>();
List<Number> nums = (List<Number>) doubles;
nums.add(new Integer(5)); // no compiler complaints here...
// doubles now contains an Integer value!
如果您的情况没有办法解决这个问题,我相信 @SuppressWarnings("unchecked")
是您最好的选择。
关于java - 在转换为父类(super class)列表时,Java 中未检查的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4480224/