Я пытаюсь сериализовать простой класс 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)
(однако это не сработало)