Java

Monday, April 24, 2006

 

Serialização

Para que um objeto de uma classe seja serializável, ela precisa implementar a interface Serializable. Quando um objeto é serializado, todas as suas variáveis de instância são serializadas também, inclusive variáveis que se referem a outros objetos. No entanto, se algumas das variáveis de instância de um objeto serializável não é ela mesma serializável, então ocorrerá um erro em tempo de execução ao tentar serializar o objeto. Uma instância da classe abaixo provocaria este erro ao ser serializado.

public class Animal implements Serializable{
public X peso;
public int idade;
}

public class X{int peso}

Este erro pode ser contornado marcando-se a variável de instância peso como transient:

public transient X peso;

Neste caso, no entanto, a variável de instância peso não será serializada quando um objeto do tipo Animal for serializado. Variáveis transient recebem o valor default quando um objeto é deserializado. A variável peso de um objeto Animal receberia o valor default null num processo de deserialização.

Vejamos agora a situação em que a classe serializável tem como superclasse uma outra não-serializável:

public class Animal{public int peso=10;}
public class Gato extends Animal implements Serializable{
public int idade;
}

Imagine agora que criamos um objeto g do tipo Gato e fazemos g.peso=12; Em seguida, serializamos o objeto. Ao ser deserializado, a variável g.peso valerá 10 e não 12. Quando um objeto serializável tem uma superclasse não-serializável, o construtor dessa classe é chamado e as suas variáveis de instância são inicializadas normalmente.

Comments: Post a Comment



<< Home

Archives

March 2006   April 2006   May 2006   July 2006   August 2006  

This page is powered by Blogger. Isn't yours?