giovanni_stiwes tem razão mas, as referências a objetos do clone serão as mesmas do objeto clonado, para se criar uma nova estrutura é necessário que você sobrescreva o método clone.
Desculpem minha ignorância mas alguém poderia me dar um exemplo útil que poderia usar isso?
Amigos desculpe demorar a responder o meu próprio tópico… mas o objetivo de querer copiar o objeto é o seguinte… e quero fazer uma copia de um objeto advindo do banco de dados para quando eu for gravar poder comprar se os objetos são iguais ou não assim gravar o log do que aconteceu!!!
Esse .clone() vai me ajudar ou ele mandem a referencia do objeto principal?
O método clone() pertence à classe Object e é protected. Se o clone vai funcionar pra vc, depende da implementação que vc der, ou que foi dada por que fez a classe que vc vai utilizar. O clone() retorna (ou deve retornar, no caso de sobrescrevê-lo) uma instância diferente daquela que o invocou. Tipo assim: a expressão booleana x.clone() != x é verdadeiro, assim como também são verdadeiras x.clone().getClass() == x.getClass(), e x.clone().equals(x).
Tem só um porém que vale atenção, que é quando vc invoca o super.clone() e o “super” é a classe Object. Ela nativamente vai fazer a cópia campo-a-campo entre o objeto original e o objeto clonado. Isso implica que se a classe dos objetos tiver algum atributo que seja um objeto mutável (um campo do tipo Hashtable, por exemplo), as mudanças sofridas por este, seram refletidas nos objetos clonado e original, ou seja, esse campo será compartilhado entre o objeto original e o seu clone.
Espero ter ajudado, e se disse alguma besteira, pelo amor de Deus me corrijam!!! :lol:
Eu uso isso para modificar objetos de um array list, que são protegidos.
Quer dizer que só posso recuperar o objeto com o get(index) e modificá-lo com o set(index, object)
ou seja: se eu preciso modificar um único campo de um objeto da lista, preciso criar uma cópia temporária deste objeto fora da lista, modificar o campo e substituir o original pela cópia dentro da lista…
fica assim:
class Interna
{
atributo a;
atributo b;
}
public class Externa
{
ArrayList<Interna> lista;
public Externa();
{
lista = new ArrayList<Interna>();
//supomos que agora este construtor carregue vários objetos da classe Interna a partir de um registro externo
}
}
Agora, se quisermos modificar algum campo de um destes registros preservando os originais, se fizermos