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

时间:2011-03-05 03:56:04

标签: java android eclipse

我在 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。使用此代码的应用程序每天执行多次超过一个月没有失败,但编译器警告困扰我,我不想只是可以“正确”检查它。

3 个答案:

答案 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