Следующий код:
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
. Объявление внутреннего класса static решает его, но что, если InnerClass
нуждается в этом доступе? Существует ли способ сериализации нестатического внутреннего класса без охватывающего класса, например. сделав ссылку на внешний класс transient
?
edit: например, доступ к внешнему классу может потребоваться только до сериализации. ОК, компилятор не может этого знать, но я подумал, почему существует ключевое слово transient
.