在转换为超类列表时,在Java中取消选中

k21*_*k21 2 java casting unchecked suppress-warnings

在我的Java程序中,我需要将类型的对象强制转换List<? extends SomeBaseClass>List<SomeBaseClass>.如果我直接转换它,编译器会抱怨(显示警告)存在未经检查的强制转换.即使我可以确定所有对象都可以转换为它们的超类,编译器也不会注意到它并报告未经检查的强制转换.我该如何摆脱警告?除了@SupressWarnings("未选中")还有其他方法吗?

PS:代码工作正常,我只是好奇是否有更好的做事方式.

编辑:

解决方案:如果他确定将来不会更改列表,则应该只进行此类投射.但是当我们将单个对象从列表中取出时,最好将其抛出.

aio*_*obe 7

编辑器会抱怨,因为如果您SomeBaseClassList<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!
Run Code Online (Sandbox Code Playgroud)

如果在你的情况下无法解决这个问题,我相信这@SuppressWarnings("unchecked")是你最好的选择.