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();