Sobre a serialização de classes internas do Java

Caso 1:

public class DistributeData implements  SerializedName{
    
    

 public class CodeDetail {
    
    ...}

}

CodeDetail não será serializado.

Caso dois:

public class DistributeData implements  SerializedName{
    
    

 public class CodeDetail implements  SerializedName{
    
    ...}

}

Relate NotSerializableException e verifique se há erros.Embora a classe CodeDetail implemente a interface Serializable, CodeDetail é definido na forma de uma classe interna no projeto.

E classes internas não podem ser serializadas!

Para classes internas, somente classes internas estáticas podem ser serializadas. deveria estar:

public class DistributeData implements  SerializedName{
    
    

 public static class CodeDetail implements  SerializedName{
    
    ...}

}

Portanto, tente usar menos classes internas e limite demais para evitar problemas desnecessários.

Caso três:

public class DistributeData {
    
    

 public class CodeDetail implements  SerializedName{
    
    ...}

}

Uma exceção é relatada durante a operação: Objetos que não implementam a interface de serialização não podem ser serializados.
Todas as classes internas, classes internas locais e classes internas anônimas podem acessar diretamente as variáveis ​​de instância e os métodos da classe de encapsulamento externa. Considerando que as classes aninhadas estáticas não podem.
Instâncias de classes internas, classes internas locais e classes internas anônimas mantêm uma referência implícita a uma instância de uma classe de encapsulamento externa, e a serialização de objeto Java requer que todos os membros do objeto no objeto implementem a interface de serialização. Portanto, se apenas a classe interna implementar a serialização, mas a classe de encapsulamento externa não implementar a interface de serialização, uma exceção será relatada quando a classe interna for serializada.

Explicação do princípio:

As classes internas são um tipo de classe aninhada e existem quatro tipos de classes aninhadas:

classe aninhada estática classe aninhada estática
classe interna classe interna (não estática)
classe local classe local (definida dentro do método)
classe anônima classe anônima
  O comportamento das classes aninhadas estáticas é mais próximo das classes comuns e as outras três são classes internas reais. A diferença está no escopo.
Escreva a descrição da foto aqui

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

Acho que você gosta

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