我在 readObject()的行中收到“类型安全:从Object to ArrayList 未经检查的强制转换”警告,在此代码段中:
// 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
是一个简单的类,包含一些字符串,日历,布尔值和整数。在上面的镜像操作中使用ObjectOutputStream编写ArrayList
。使用此代码的应用程序每天执行多次超过一个月没有失败,但编译器警告困扰我,我不想只是可以“正确”检查它。
答案 0 :(得分:28)
取消它。你唯一的另一种选择是转换为ArrayList,但是然后你的代码中的其他地方你必须处理无类型的ArrayList并在读取时进行转换。在这种情况下压制没有害处。
答案 1 :(得分:5)
编译器是否正确 - 谁说您正在读取的对象确实是一个ArrayList?我可以轻松地用完全不同的东西替换文件,你会得到一个例外。
Object obj = ois.readObject();
if (obj instanceof ArrayList)
// do something
else
// Error
应该有效。是的,你仍然会因为通用而得到警告,但那时候是Java的通用系统,摆脱它会意味着创建一个新对象并一次添加一个事件 - 但是我们必须将对象转换为事件和..唉,不是没有更好,只是与通用警告一起生活。
答案 2 :(得分:1)
老了,但是我的同一个人“谷歌来了”回复。
如果你想避免它并且没有真正对CPU或RAM限制征税,你可以试试Collections.copy