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

Pet*_*son 14 java eclipse android

在这段代码片段中,我在readObject()行上获得了" 类型安全:从Object到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();
}
Run Code Online (Sandbox Code Playgroud)

Event是一个简单的类,包括一些字符串,日历,布尔值和整数.的ArrayList是使用在镜像操作,以上述ObjectOutputStream写入.该代码中使用的应用程序是在一个月多次执行的一天,没有失败,但是编译器警告令我烦恼,我不想只是抑制它,如果它可以被"选中"正常.

Kon*_*hik 28

抑制它.你唯一的另一种选择是转换为ArrayList,但是然后你的代码中的其他地方你必须处理无类型的ArrayList并在读取时进行转换.在这种情况下抑制没有害处.


Voo*_*Voo 5

那么编译器是正确的-谁说您正在阅读的对象确实是ArrayList?我可以轻松地用完全不同的文件替换文件,您会遇到异常。

Object obj = ois.readObject();
if (obj instanceof ArrayList) 
    // do something
else 
    // Error
Run Code Online (Sandbox Code Playgroud)

应该管用。是的,由于泛型,您仍然会收到警告,但这就是Java的泛型系统,要摆脱这种情况,就意味着要创建一个新对象并一次添加一个Event -但是,我们必须将Object转换为事件和.. argh,不是更好,只是接受一般警告。