Java:为什么在调用 .readObject() 时,具有引用泛型类型的 ArrayList 不计为强制转换?

发布于 2024-12-02 04:22:00 字数 428 浏览 1 评论 0原文

我正在从保存文件加载 ArrayList,该文件具有推断的泛型类型,但 eclpise 告诉我我还没有检查强制转换,为什么不 (ArrayList)当 (TypeOfObject) 算作强制转换时, 算作强制转换吗?

    game.evilSprites = (ArrayList<EvilSprite>) OIS.readObject();

将对象转换为邪恶精灵有效...

    game.evilSprite = (EvilSprite) OIS.readObject();

编辑:太好了,谢谢,所以它至少是一个有效的转换,我如何检查它以删除警告?

I am loading an ArrayList from a save file which has a generic type inferred, but eclpise is telling me I haven't checked the cast, why doesn't (ArrayList< TypeOfObject >) count as a cast when (TypeOfObject) does?

    game.evilSprites = (ArrayList<EvilSprite>) OIS.readObject();

casting the object as an evilSprite works...

    game.evilSprite = (EvilSprite) OIS.readObject();

EDIT: great, thank you, so it is at least a valid cast, how do I check it to remove the warning?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧情别恋 2024-12-09 04:22:00

它确实算作强制转换,但无法正确检查。在执行时,由于类型擦除,对象没有关于它是否是 ArrayListArrayList等的信息。因此,您的演员正在检查它是否是某种类型的ArrayList,但是当您尝试从其中获取精灵时,您仍然可能会得到ClassCastException it - 这些值可能并不都是 EvilSprite 引用。

It does count as a cast, but it can't be checked properly. At execution time, an object has no information about whether it's an ArrayList<String>, an ArrayList<Object> etc, due to type erasure. So your cast is checking that it's an ArrayList of some kind, but you could still get a ClassCastException when you try to fetch a sprite out of it - the values may not all be EvilSprite references.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文