Bom dia, estou tendo problemas utilizando copia de classe vejam, tenho uma classe:
package maxctrl.componentes;
public class ParametrosInternos {
private String bancoDadosDestino = "";
public void setBancoDadosDestino(String bancoDadosDestino) {
this.bancoDadosDestino = bancoDadosDestino;
}
public String getBancoDadosDestino() {
return bancoDadosDestino;
}
}
Isso é um simples exemplo Ok … Agora imagine se eu instanciar duas vezes essa classe:
ParametrosInternos teste1 = new ParametrosInternos();
ParametrosInternos teste2 = new ParametrosInternos();
ok, assim eu tenho 2 objetos, o teste1 e o teste2, os seus valores devem ser separados, se eu setar um valor no teste1, só deve afetar o teste1 e não os 2 Correto …
Até ai funciona perfeitamente, mas se em algum momento eu quizer fazer uma copia, deixar o teste2 igual ao teste1 dessa forma:
teste2 = teste1;
ok, os objetos ficaram iguais, mas apartir desse ponto, tudo o que eu alterar em um objeto sera alterado nos dois, por exemplo se eu setar o teste2, tambem sera alterado o teste1;
Isso é normal ?, como eu posso fazer uma copia e, os objetos continuarem sendo separados ??
Olá lepopps,
Quando você faz uma cópia de objetos utilizando o sinal de atribuição “=” (teste2 = testes1) ele vai fazer uma cópia do endereço de teste1 para o teste2 então agora os dois objetos fazem referência ao mesmo endereço de memória, no caso o teste2 faz referência ao mesmo endereçamento de memória do teste1. Por isso que quando mudar em um vai estar mudado no outro.
Para fazer um clone de objeto é utilizado a interface Cloneable.
Principal.java
public class Principal {
public static void main(String[] args) {
ParametrosInternos teste1 = new ParametrosInternos();
teste1.setBancoDadosDestino("valor teste1");
ParametrosInternos teste2 = new ParametrosInternos();
teste2.setBancoDadosDestino("valor teste2");
System.out.println("Objeto teste1: " + teste1.getBancoDadosDestino());
System.out.println("Objeto teste2: " + teste2.getBancoDadosDestino());
System.out.println();
try {
teste2 = (ParametrosInternos) teste1.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
System.out.println("Após fazer um clone de teste1 para teste2");
System.out.println("Objeto teste1: " + teste1.getBancoDadosDestino());
System.out.println("Objeto teste2: " + teste2.getBancoDadosDestino());
System.out.println();
teste2.setBancoDadosDestino("Novo valor para teste2");
System.out.println("Após modificar a variável BancoDadosDestino de teste2");
System.out.println("Objeto teste1: " + teste1.getBancoDadosDestino());
System.out.println("Objeto teste2: " + teste2.getBancoDadosDestino());
}
ParametrosInternos.java
public class ParametrosInternos implements Cloneable {
private String bancoDadosDestino = "";
public void setBancoDadosDestino(String bancoDadosDestino) {
this.bancoDadosDestino = bancoDadosDestino;
}
public String getBancoDadosDestino() {
return bancoDadosDestino;
}
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
Se for isso mesmo que queria poste ai.
Vlw.
Isto é normal, para Objetos.
Você, não está copiando e sim compartilhando a referência do endereço da memória.
teste1 - 0XF473
teste2 - 0x6526
teste2 = teste1;
teste1 - 0XF473
teste2 - 0XF473
Para resolver isto, através do método clone();
Valew rafaduka e rodrigorpb, esclareceram legal minha duvida, fico muito grato …