我可以使用以下代码将列表写入文件:
MyList<Integer> l = new MyList<Integer>();
//...
FileOutputStream fos = new FileOutputStream(filename);
ObjectOutputStream writer = new ObjectOutputStream(fos);
writer.writeObject(l);
writer.close();
现在我想从文件中读取列表,并尝试使用此代码:
MyList<Integer> list = new MyList<Integer>();
//...
FileInputStream fis = new FileInputStream(filename);
ObjectInputStream reader = new ObjectInputStream(fis);
list = (MyList<Integer>) reader.readObject();
reader.close();
但现在我从Eclipse获得SuppressWarnings unchecked
,我必须检查ClassNotFoundException。为什么这样,我该如何防止这种情况?
答案 0 :(得分:5)
序列化可用于将对象传输到其他应用程序。序列化类可能不会出现在读取对象的应用程序中。由于ObjectOutputStream只存储字段的内容而不存储代码,因此读取应用程序需要具有写入类的实际代码。如果它不存在,则抛出ClassNotFoundException。
对于未选中的类型:首先尝试将其读入Object实例,然后使用&#34; instanceof&#34;运算符以检查它是否实际上是MyList类型。另请参见此处的通用部分:How to avoid unchecked cast warnings with Java Generics