Следующий код:
public class TestInnerClass {
public static void main(String[] args) throws IOException {
new TestInnerClass().serializeInnerClass();
}
private void serializeInnerClass() throws IOException {
File file = new File("test");
InnerClass inner = new InnerClass();
new ObjectOutputStream(new FileOutputStream(file)).writeObject(inner);
}
private class InnerClass implements Serializable {
private static final long serialVersionUID = 1L;
}
}
вызывает следующее исключение:
Exception in thread "main" java.io.NotSerializableException: TestInnerClass
Я полагаю, что внутренний класс имеет поле TestInnerClass.this
, которое позволяет ему частный доступ к Поля и методы TestInnerClass
. Объявление статического внутреннего класса решает проблему , но что, если InnerClass
нуждается в этом доступе? Есть ли способ сериализовать нестатический внутренний класс без закрывающего класса, например. сделав ссылку на внешний класс transient
?
edit: например, доступ к внешнему классу может потребоваться только перед сериализацией. Хорошо, компилятор не может этого знать, но я подумал, что именно поэтому существует ключевое слово transient
.