| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2006 17:53:54
|
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?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2006 20:56:47
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2006 21:10:45
|
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?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2006 21:41:52
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/03/2006 00:35:45
|
louds
Moderador
![[Avatar]](/images/avatar/1e48c4420b7073bc11916c6c1de226bb.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/03/2006 01:25:24
|
agodinhost
Virtual Machine Man
![[Avatar]](/images/avatar/b8ffa41d4e492f0fad2f13e29e1762eb.jpg)
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". |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/03/2006 09:47:44
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/03/2006 13:02:26
|
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.
|
|
|
 |
|
|