Como obter Copia de Objeto e Não referencia?

2 respostas
wandersonxs

Faaala Pessoal,
tenho uma classes que ao subir meu projeto carrego ela e a disponibilizo nesta fachada (outra classe) como uma variavel estatica… Ela serve de modelo de dados que carrego de um XML.

Agora meu problema, quero criar copias desta classe que esta na variavel static, mas sempre o que consigo eh apenas a referencia. Dai nao importa quantos modelos de objeto obtenha o valor sempre vai refletir em todos por ser static.

public class FachadaModeloCamposComponente implements IFachadaModeloCamposComponente {
	
	private static ModeloComponente modeloComponente;	
private static IFachadaModeloCamposComponente fachadaModeloCamposComponente = null;

	public void setModeloComponente(ModeloComponente p_ModeloComponente) {
		modeloComponente = p_ModeloComponente;
	}


	
	
	public ModeloComponente getModeloComponenteCopia() {
		
		ModeloComponente copiaModeloComponente = new ModeloComponente();
		try {
			BeanUtils.copyProperties(copiaModeloComponente, modeloComponente);
			} catch (IllegalAccessException e) {
				// TODO Bloco de captura gerado automaticamente
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				// TODO Bloco de captura gerado automaticamente
				e.printStackTrace();
			}
	
		return newModeloComponente;
	}

}

Qq ajuda eh bem vindo… abracos

Obrigado
Wanderson 8)

2 Respostas

J

Procure por Java deepClone ou deepCopy no Google.

Uma das formas de fazer isso de modo simples e relativamente rapido eh via serializacao:

ByteArrayOutputStream baos = new ByteArrayOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(baos);

oos.writeObject(this);

ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

ObjectInputStream ois = new ObjectInputStream(bais);

Object deepCopy = ois.readObject();

Porem, se for um objeto instrumentado, vc terah grandes dores de cabeça. Em minha empresa implementei um deepCopy especializado para hibernate, q tem como proposito remover a serie de instrumentacoes q o hibernate retorna em seus pojos.

Vc deve se preocupar com performance ao fazer esse tipo de operacao. Procure medir o tempo q esse procedimento leva.

M

Implemente a interface Clonable. depois ao passar o objeto como parametro use Objet.clone()

Criado 24 de outubro de 2008
Ultima resposta 26 de out. de 2008
Respostas 2
Participantes 3