gpt4 book ai didi

java - 在转换为父类(super class)列表时,Java 中未检查的转换

转载 作者:行者123 更新时间:2023-12-03 01:39:33 26 4
gpt4 key购买 nike

在我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com