Acerca de la serialización de clases internas de Java

Caso 1:

public class DistributeData implements  SerializedName{
    
    

 public class CodeDetail {
    
    ...}

}

CodeDetail no se serializará.

Caso dos:

public class DistributeData implements  SerializedName{
    
    

 public class CodeDetail implements  SerializedName{
    
    ...}

}

Informe NotSerializableException, compruebe si hay errores, aunque la clase CodeDetail implementa la interfaz Serializable, CodeDetail se define en forma de una clase interna en el proyecto,

¡Y las clases internas no se pueden serializar!

Para las clases internas, solo se pueden serializar las clases internas estáticas. debiera ser:

public class DistributeData implements  SerializedName{
    
    

 public static class CodeDetail implements  SerializedName{
    
    ...}

}

Por lo tanto, trate de usar menos clases internas y limite demasiado para evitar problemas innecesarios.

Caso tres:

public class DistributeData {
    
    

 public class CodeDetail implements  SerializedName{
    
    ...}

}

Se informa una excepción durante la operación: los objetos que no implementan la interfaz de serialización no se pueden serializar.
Todas las clases internas, las clases internas locales y las clases internas anónimas pueden acceder directamente a las variables de instancia y los métodos de la clase de encapsulación externa. Mientras que las clases anidadas estáticas no pueden.
Las clases internas, las clases internas locales y las instancias de clases internas anónimas tienen una referencia implícita a una instancia de clase de encapsulación externa, y la serialización de objetos Java requiere que todos los miembros del objeto implementen la interfaz de serialización. Por lo tanto, si solo la clase interna implementa la serialización, pero la clase de encapsulación externa no implementa la interfaz de serialización, se informará una excepción cuando se serialice la clase interna.

Explicación del principio:

Las clases internas son un tipo de clase anidada y hay cuatro tipos de clases anidadas:

clase anidada estática clase anidada estática
clase interna clase interna (no estática)
clase local clase local (definida dentro del método)
clase anónima clase anónima
  El comportamiento de las clases anidadas estáticas es más cercano a las clases ordinarias, y las otras tres son clases internas reales. La diferencia radica en el alcance.
Escriba la descripción de la imagen aquí

http://www.jianshu.com/p/8b8bfe1fd488

Supongo que te gusta

Origin blog.csdn.net/lrxb_123/article/details/73863807
Recomendado
Clasificación