Renovar referencias de uma lista[resolvido]

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?

// 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!

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!