阅读后无法添加到对象

时间:2016-04-18 19:39:11

标签: java object arraylist file-io

这是创建的对象,我们为其添加一个元素。

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尝试过它并且它有效。我在这里做错了,或者我的其余代码都是垃圾。

1 个答案:

答案 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]