/ / SerialVersionUID com "long static final long" ainda recebe InvalidClassException - java, serialização

SerialVersionUID com “private static final long” ainda recebe InvalidClassException - java, serialização

Compilei e agrupei os vários projetos em meu aplicativo Java, gerando serialVersionUIDs automaticamente através do Eclipse para todas as minhas classes derivadas de Serializable.

Eu li as respostas para isso questãoe verificou que serialVersionUids são todos private static final long.

No entanto, recebo um erro como esse ao tentar executar:

java.io.InvalidClassException: com.acme.product.Widget; classe local incompatível: stream classdesc serialVersionUID = 5226096973188250357, local classe serialVersionUID = -5432967318654384362

o que estou perdendo?

Respostas:

1 para resposta № 1

Você provavelmente tem um problema de caminho de classe, em que seu programa está resolvendo uma versão incompatível mais antiga da classe que possui um valor diferente para serialVersionUID.

Ou o objeto serializado que está sendo carregado foi serializado com uma versão mais oder da classe que agora não está disponível.


1 para resposta № 2

Se a classe mudou desde que você a serializou, a alteração pode ser incompatível. A serialização não pode desserializá-la, mesmo com o serialVersionUID incluído.

Se você tiver a classe como era quando serializada (por exemplo, do SCM), tente reverter para ela novamente, gere novamente o serialVersionUID e execute novamente.

Se você fez alterações incompatíveis, precisará implementar readObject () / writeObject () para lidar com os detalhes da serialização.


-1 para resposta № 3

stream classdesc serialVersionUID = 5226096973188250357

o que estou perdendo?

O que está faltando é estático final estático privado serialVersionUID = 5226096973188250357L;

No entanto, se a classe alterada não for mais compatível com serialização (consulte a Especificação de serialização de objetos), agora você poderá obter erros mais obscuros.