这是创建的对象,我们为其添加一个元素。
ArrayList <Apartma> poljeApartma = new ArrayList<Apartma>();
poljeApartma.add(new Apartma()); //size(1)
输出代码:
try {
ObjectOutputStream oos =new ObjectOutputStream (new GZIPOutputStream(new FileOutputStream("apartman.ser")));
oos.writeObject(poljeApartma);
oos.flush();
oos.close();
} catch (Exception aaa) {
System.out.println("Tezave "+aaa.toString());
}
我的阅读方式:
try {
ObjectInputStream ois = new ObjectInputStream (new GZIPInputStream(new FileInputStream("apartman.ser")));
poljeApartma = (ArrayList<Apartma>) ois.readObject();
} catch (Exception aaa) {
System.out.println("Tezave "+aaa.toString());
}
我可以打印出来:
System.out.print(poljeApartma); //size(1)
//the correct version, even if relaunch the program, so that works.
但是一旦我把它从文件中删除后我尝试添加到该对象它就不会做任何事情。
poljeApartma.add(new Apartma()); //size(1)
我用简单的ArrayList尝试过它并且它有效。我在这里做错了,或者我的其余代码都是垃圾。
答案 0 :(得分:0)
您的对象已变为只读对象。 JVM无法确定在读取文件时检索到的对象实际上是包含List
的{{1}}。确定它是Integer
,但对于其他人来说,没有什么是确定的。
以下是您的代码的等效内容
List
这里的确定性是List<Integer> i = Arrays.asList(1,2,3,4);
Object o = i;
List<Integer> list = (List<Integer>) o;
System.out.println(list);
list.add(5); // Runtime Exception
是list
,没有别的可以说的。其内容的类型是未知的,因此不允许写入,因为我们不知道允许写什么。
例如,以下编译完美
List<?>
这是一个完美的解决方法。创建一个新的List<Integer> i = Arrays.asList(1,2,3,4);
Object o = i;
List<String> list = (List<String>) o;
System.out.println(list);
对象,并将其作为参数提供给它。
ArrayList
List<Integer> i = Arrays.asList(1,2,3,4);
Object o = i;
List<Integer> list = new ArrayList<>((List)o);
list.add(5);
System.out.println(list); // [1,2,3,4,5]