未经检查的警告 – 如何避免这种情况?

在这段代码片段中,我得到了一个“ types安全:未经检查的从Object到ArrayList的强制types转换 ”警告。

// Read the Event List theEventArrayList = new ArrayList<Event>(); String FILENAME = "EventData.dat"; FileInputStream fis; try { fis = openFileInput(FILENAME); ObjectInputStream ois = new ObjectInputStream(fis); theEventArrayList = (ArrayList<Event>) ois.readObject(); fis.close(); } 

Event是一个简单的类,由一些string,日历,布尔值和整数组成。 在上面的镜像操作中使用ObjectOutputStream来写入ArrayList 。 这个代码使用的应用程序每天执行很多次,一个多月没有失败,但是编译器的警告让我困扰,而且我不想只是在可以“正确”检查的时候才把它压制掉。

压制它。 你唯一的另一种select是投射到ArrayList,但是在你的代码中的其他地方,你必须处理无types的ArrayList并在读取时进行投射。 在这种情况下压制是没有害处的。

那么编译器是正确的 – 谁说你正在阅读的对象真的是一个ArrayList? 我可以很容易地用完全不同的东西replace文件,你会得到一个例外。

 Object obj = ois.readObject(); if (obj instanceof ArrayList) // do something else // Error 

应该pipe用。 是的,你仍然会得到一个警告,因为通用的,但那是Java的通用系统,摆脱这将意味着创build一个新的对象,并在一次添加一个事件 – 但是,那么我们将不得不将对象事件和..啊,不,不好,只是与通用的警告生活。

老,但我同样的醇'“谷歌在这里”回应。

如果你想避免它,并没有真正纳税CPU或RAM的限制,你可以尝试Collections.copy