加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 这是滥用铸造?

发布时间:2020-12-15 04:29:28 所属栏目:Java 来源:网络整理
导读:我有一些对象列表 ListMyObject 但我知道它是从MyObject继承的某个对象的列表 ListChildObject 试图从一个投射到另一个给我一个“Unconvertible Types”警告.但是,如果我首先转换为对象然后转换为转换为第二种类型的列表,则警告消失 ListChildObject myChild
我有一些对象列表

List<MyObject>

但我知道它是从MyObject继承的某个对象的列表

List<ChildObject>

试图从一个投射到另一个给我一个“Unconvertible Types”警告.但是,如果我首先转换为对象然后转换为转换为第二种类型的列表,则警告消失

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循环的标题中,而不是在你的演员阵容中.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读