El siguiente código:¿Por qué una clase interna serializable no es serializable?
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;
}
}
desencadena la siguiente excepción:
Exception in thread "main" java.io.NotSerializableException: TestInnerClass
supongo que la clase interna tiene un campo TestInnerClass.this
que le permite el acceso privado a TestInnerClass
's campos y métodos. Declarando la clase interna estática solves it, pero ¿qué pasa si InnerClass
necesita este acceso? ¿Hay alguna forma de serializar una clase interna no estática sin la clase adjunta, p. haciendo la referencia a la clase externa transient
?
editar: por ejemplo, el acceso a la clase externa podría ser necesario solo antes de la serialización. OK, el compilador no puede saber eso, pero pensé que esa es la razón por la cual existe la palabra clave transient
.
¿trató de declarar la clase interna estática? 'private static class InnerClass' – gnat