关于java:unchecked cast warning – 如何避免这种情况?

unchecked cast warning - how to avoid this?

本问题已经有最佳答案,请猛点这里访问。

我在readObject()的行中收到"type safety:unchecked cast from object to arraylist"警告,在以下代码段中:

1
2
3
4
5
6
7
8
9
10
// 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是一个简单的类,由一些字符串、日历、布尔值和int组成。ArrayList是使用上面的镜像操作中的objectOutputstream编写的。使用此代码的应用程序一天执行多次,执行时间超过一个月,没有出现任何故障,但编译器警告让我很困扰,如果可以正确地"检查"它,我不想仅仅抑制它。


压制它。您唯一的另一种选择是强制转换为arraylist,但是在代码中的其他地方,您必须处理非类型化的arraylist并强制转换为read。在这种情况下压制是无害的。


好吧,编译器是正确的——谁说你正在读取的对象实际上是一个数组列表?我可以很容易地用完全不同的东西替换文件,您会得到一个例外。

1
2
3
4
5
Object obj = ois.readObject();
if (obj instanceof ArrayList)
    // do something
else
    // Error

应该工作。是的,你仍然会得到一个警告,因为它是泛型的,但是那是Java的通用系统,摆脱它意味着创建一个新的对象并在一个时间添加一个事件——但是,我们必须将对象投射到事件和…啊,不是更好,只是活在一般的警告。


老了,但我同样的"谷歌来了"回应。

如果您想避免它,并且不受CPU或RAM限制的限制,可以尝试collections.copy。