gpt4 book ai didi

java - 这是滥用类型转换吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:24:07 26 4
gpt4 key购买 nike

我有一些对象的列表

List<MyObject>

但我知道它是一些继承自 MyObject 的对象的列表

List<ChildObject>

尝试从一种类型转换为另一种类型时,会出现“不可转换类型”警告。但是,如果我先转换为对象,然后转换为转换为第二种类型的列表,则警告消失

List<ChildObject> myChildList = (List<ChildObject>) (Object) myObjectList

这似乎工作正常。有什么理由我不应该这样做吗?它会抛出错误吗?有更好的方法吗?还是被认为是不好的做法?

最佳答案

Is there any reason I shouldn't be doing this?

列表中的泛型类型参数可以帮助编译器在编译时为您进行类型检查。转换会丢弃此检查,将检查移至运行时。

Could it throw an error?

是的,如果列表包含 ChildObject 以外的对象,它可以。最糟糕的是,转换可能会在一些完全不相关的地方失败,您的代码根本没有转换。

例如,如果你这样做

// Do the hack; 
List<ChildObject> myChildList = (List<ChildObject>) (Object) myObjectList;
...
// Iterate over your list
for (ChildObject c : myChildList) {
...
}

在上面的例子中,如果myObjectList有一些不同于ChildObject的类,运行时就会出现类转换异常。但是,它会发生在 for 循环的 header 中,而不是在您进行强制转换的位置。

Is there a better way, or is it considered bad practice?

更好的方法是创建一个 ChildObject 集合,并用原始数组的内容填充它。

关于java - 这是滥用类型转换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32395453/

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