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!