Следующий код:
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
.