java – 这是滥用铸造?
我有一些对象列表
List<MyObject> 但我知道它是从MyObject继承的某个对象的列表 List<ChildObject> 试图从一个投射到另一个给我一个“Unconvertible Types”警告.但是,如果我首先转换为对象然后转换为转换为第二种类型的列表,则警告消失 List<ChildObject> myChildList = (List<ChildObject>) (Object) myObjectList 这似乎工作正常.我有什么理由不这样做吗?它会抛出一个错误,有更好的方法还是被认为是不好的做法? 解决方法
列表中的通用类型参数可帮助编译器在编译时为您进行类型检查.施放抛弃此检查,将检查移至运行时间.
是的,如果列表包含除ChildObject之外的对象,则可以.最糟糕的是,演员阵容可能会在一些完全不相关的地方失败,你的代码根本就没有演员阵容. 例如,如果你这样做 // Do the hack; List<ChildObject> myChildList = (List<ChildObject>) (Object) myObjectList; ... // Iterate over your list for (ChildObject c : myChildList) { ... } 在上面的示例中,如果myObjectList具有除ChildObject之外的某些类,则在运行时将存在类强制转换异常.但是,它会发生在for循环的标题中,而不是在你的演员阵容中.
更好的方法是创建一个ChildObjects集合,并用原始数组的内容填充它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |