Pergunta

Eu estava usando a implementação de Mersenne-Twister em http://www.math.sci.hiroshima-u.ac.jp/~m-mat/mt/versions/java/mtrandom.java como substituto de entrega para o padrão java.util.Random classe. No entanto, quatro campos (um int, um booleano e dois byte []) são marcados como transient. Isso significa que não consigo serializar um objeto dessa classe sem implementar a funcionalidade personalizada.

A questão é: existe alguma razão para que esses campos sejam marcados transitórios? Existe algum código que possua informações que não farão sentido quando o objeto é lido em um arquivo? Eu removi o transient Modificador dos campos e parece funcionar bem, mas eu não o testei intensamente e, portanto, pode haver casos em que ele quebre?

Pessoalmente, não consigo ver o porquê, já que tudo o que é feito na classe é aritmético.

Foi útil?

Solução

Provavelmente o raciocínio por trás de fazer tudo dos campos não estáticos da classe transient era assim que o MTRandom A classe permanece compatível binário com java.util.Random, do qual é estendido.

Então, teoricamente, você poderia serializar um MTRandom exemplo, e desaperializá -lo como um Random instância e tudo funcionaria.

Se esses campos não forem transient, então eles seriam serializados e se tornariam incompatíveis.

No entanto, até onde eu sei, remover os transientes não deve causar um problema para você.

Outras dicas

Do comentário sobre serialVersionUID, parece que o autor não queria considerar a serialização. Adicionando transient pode ter suprimido alguns avisos do compilador/IDE.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top