Renovar referencias de uma lista[resolvido]

3 respostas
xxmayconxx

Olá, pessoal,

gostaria de saber se é possível renovar as referencias de uma lista sem ter que recriar novos objetos, por exemplo

Pessoa p = new Pessoa();
p.setNome(“Carlos”);

lista1.add§;
lista2.add§;

lista2.get(0).setNome(“André”);

No caso acima ao se mudar o nome da pessoa que está em p2, a pessoa que está em p1 também será mudada, existe um modo prático de resolver isso?

3 Respostas

freakazoid
// Desta forma a variável de referência p2 vai aportar para o mesmo objeto de p1
// Logo p1 e p2 podem modificar o estado do mesmo objeto.
Pessoa p1 = new Pessoa("Carlos"); 
Pessoa p2 = p1;

O que você precisa fazer é criar um novo objeto.

Sugestão 1: Você pode sobrecarregar o construtor da classe Pessoa para criar um “clone”:

public class Pessoa(){

  private String nome;

  //construtor padrão
  public Pessoa(){}

  //construtor Clone
  public Pessoa(Pessoa pessoa){

    this.nome = pessoa.getNome();

  }

  public Pessoa(String nome){

    this.nome = nome;

  }

// gets e sets...

}

Teste:

public class Teste{

  public static void main(String [] args){
    Pessoa p1 = new Pessoa("Carlos");
    Pessoa p2 = new Pessoa(p1);
		
    p1.setNome("Fulano");
		
    System.out.println(p1.getNome());
    System.out.println(p2.getNome());
  }

}

Sugestão 2: usar Reflection

Abs!

freakazoid
xxmayconxx

Na verdade o método que usei segue essa mesma idéia, só queria saber mesmo se existia alguma forma menos “manual” de resolver isso

valeu!

Criado 27 de dezembro de 2013
Ultima resposta 30 de dez. de 2013
Respostas 3
Participantes 2