Serialização e contagem de instâncias  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
renatosilva
GUJ Master

Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline

Tem um campo estático na classe que conta as instâncias. Só que ao desserializar, o construtor que incrementa a contagem não é chamado e essa contagem não fica correta. Como eu resolvo isso?

Matheus Tardivo
JavaChild

Membro desde: 27/03/2006 09:43:20
Mensagens: 134
Localização: São Paulo - SP
Offline

1) Variáveis estáticas não são salvas na serialização. Isso porque variáveis estáticas são variáveis de classe e não do objeto.
2) Quando um objeto é desserializado, as variáveis estáticas continuaram a ser as mesmas de antes da desserialização.
3) Quando um objeto é desserializado não será criada uma nova instância do objeto. A desserialização apenas "recupera" objetos salvos em um arquivo. Por isso, o construtor não é chamado, ou melhor, o construtor já foi chamado quando a instância daquele objeto foi criado (antes de ser serializado).

Neste caso, como sequencia é transient e o construtor de Pessoa não será chamado novamente, seu valor será o padrão (0) e o valor de totalPessoas será o mesmo de antes da desserialização, ou seja, 1.

Matheus Tardivo
http://tardivo.org
[WWW] [MSN]
renatosilva
GUJ Master

Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline

1 e 2: eu sei.
3: pelo o que eu entendi é criada uma nova instância sim, não é? A diferença é que não é pelo construtor, mesmo porque não há como advinhar qual usar, não é isso?

O ponto é: como contar as instâncias, incluindo as desserializadas?
Matheus Tardivo
JavaChild

Membro desde: 27/03/2006 09:43:20
Mensagens: 134
Localização: São Paulo - SP
Offline

renato3110 wrote:
3: pelo o que eu entendi é criada uma nova instância sim, não é? A diferença é que não é pelo construtor, mesmo porque não há como advinhar qual usar, não é isso?

pag 310, cap 14 - Java - Use a Cabeça! wrote:
Espaço é atribuído para um novo objeto do heap, mas o construtor do objeto serializado NÃO é executado! É claro que, se o construtor fosse executado, ele restauraria o objeto com o seu estado 'novo' original, e não é isso que queremos. Queremos que o objeto seja restaurado ao estado que tinha quando foi serializado e não quando foi criado.

renato3110 wrote:
O ponto é: como contar as instâncias, incluindo as desserializadas?

Agora eu também quero saber... vou dar uma pesquisada, caso eu consiga encontrar alguma coisa volto a postar.

Matheus Tardivo
http://tardivo.org
[WWW] [MSN]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Implemente readObject e seja feliz. Se não souber do que se trata RTFM.

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
agodinhost
Virtual Machine Man
[Avatar]

Membro desde: 28/03/2006 21:19:16
Mensagens: 590
Localização: RJ, Tijuca
Offline


acho que vc poderia sobrescrever os métodos writeObject e readObject pra que na serialização vc pudesse resolver essa questão do static (lá vc poderia serializar seu objeto com alguma tranqueira genérica e mais legível - tipo XMLEncoder e XMLDecoder e então ler ou gravar sua váriável static sob alguma condição específica)

o que vc acha?

Woody

"The difference between theory and practice is that, in theory, there is no difference between theory and practice".
[WWW] [MSN]
renatosilva
GUJ Master

Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline

Matheus Tardivo wrote:...


Não etendi se está concordando ou discordando, mas enfatizando, é criada uma nova instância sim, só não se usa o construtor.

louds wrote:Implemente readObject e seja feliz. Se não souber do que se trata RTFM.


Pois é louds, o texto que eu tava lendo parou por aí e não falou desses métodos que eu esqueci e do serialVersionUID. Sim, eu vou RTFM

O XMLDecoder chama o construtor padrão, acho que dá pra fazer algo em cima disso nesse caso.



renatosilva
GUJ Master

Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline

Pessoal, eu fiz umas classes utilitárias para serialização, olhem só:



O que acham? Legalzinho? Ja´existe algo do tipo?

No caso da serialização XML acho que deu pra resolver esse lance de contar referências, eu coloquei o incremento no construtor padrão do bean.
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team