2013-11-27 190 views
2

我可以写一个清单文件与此代码:阅读对象

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。为什么是这样的,我该如何防止这种情况?

回答

5

序列化可用于将对象传输到其他应用程序。序列化类可能不存在于读取对象的应用程序中。由于ObjectOutputStream只存储字段的内容而不是代码,因此阅读应用程序需要具有写入类的实际代码。如果它不存在,则抛出ClassNotFoundException。

至于未选中的类型:先尝试将其读入Object实例,然后使用“instanceof”运算符来检查它是否实际上是MyList类型。另请参见此处的通用部分:How to avoid unchecked cast warnings with Java Generics

+0

有关未检查类型的警告是因为'MyList'正在使用泛型,'MyList '不会导致警告。 –