NotSerializableException у простого класса, реализующего Serializable - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь сериализовать простой класс Sertest. Он имеет один член Decision, который сам имеет только член boolean и int, оба класса реализуют Serializable. Однако я получаю java.io.NotSerializableException: Decision.

Decision.java:

import java.io.Serializable;

public class Decision implements Serializable {
    public final int chosenValue;
    public final boolean continuePlaying;

    public Decision(int chosenValue, boolean continuePlaying){
        this.chosenValue = chosenValue;
        this.continuePlaying = continuePlaying;
    }
}

Sertest.java:

import java.io.Serializable;

public class Sertest implements Serializable {

    private Decision test;

    public Sertest(){
        this.test = new Decision(1, true);
    }

    public Decision getTest(){
        return test;
    }

}

И, наконец, мой код Main.java:

Sertest s = null;
        File f = new File("sertest.asdf");
        if(f.exists()){
            ObjectInputStream ois = null;
            try {
                ois = new ObjectInputStream(new FileInputStream(f));
                s = (Sertest) ois.readObject();
            } catch (IOException | ClassNotFoundException e) {
                e.printStackTrace();
            } finally {
                if(ois != null) {
                    try {
                        ois.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        else{
            s = new Sertest();
            ObjectOutputStream oos = null;
            try{
                oos = new ObjectOutputStream(new FileOutputStream(f));
                oos.writeObject(s);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(oos != null) {
                    try {
                        oos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        if (s != null)
            System.out.println(s.getTest().chosenValue);

Я искал и искал StackOverflow и Duckduckgo, но просто не могу найти причину этого. Я попытался:

  • Рефакторинг класса Decision, чтобы иметь закрытые члены с методами получения
  • Добавление конструктора noarg в Decision
  • Отладка с помощью установкиточка останова в ObjectInputStream.defaultReadFields(ObjectInputStream.java:2355) (однако это не сработало)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...