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

Java:为什么在调用.readObject()时,具有引用泛型类型的ArrayList不算作强制转换?,java,casting,io,Java,Casting,Io,我正在从一个推断出泛型类型的保存文件加载ArrayList,但eclpise告诉我我还没有检查强制转换,为什么(ArrayList)不算作强制转换,而(TypeOfObject)算作强制转换 game.evilSprites = (ArrayList<EvilSprite>) OIS.readObject(); 编辑:很好,谢谢,所以它至少是一个有效的强制转换,我如何检查它以删除警告?它确实算作强制转换,但无法正确检查。在执行时,由于类型擦除,对象没有关于它是否是Array

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

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

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

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

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

谢谢,那么我如何检查它以确保以后没有问题?@Sebastian:嗯,您可以迭代所有值以检查它们是否都是
evisprite
引用。。。或者你可以假设一切都会好起来,并承担延迟错误的风险。@Sebastian:好吧,这取决于你-只要你理解错误及其含义,你可能会想抑制它。非常感谢你的帮助谢谢,那么我如何检查它以确保我以后没有问题?@Sebastian:好吧,您可以迭代所有值以检查它们是否都是
evisprite
引用。。。或者你可以假设一切都会好起来,并承担延迟错误的风险。@Sebastian:好吧,这取决于你——只要你理解错误及其含义,你可能会想要抑制它。非常感谢你的帮助
    game.evilSprite = (EvilSprite) OIS.readObject();