Fala galera!
Creio que não criei nada novo, mas gostaria de uma opinião antes de sair utilizando nos projetos…
A ideia de criar um clone de um objeto através do construtor da própria classe é muito estranha??
public class Pessoa {
private String nome;
private Endereco endereco;
public Pessoa() {}
public Pessoa(String nome, Endereco endereco) {
this.nome = nome;
this.endereco = endereco;
}
//Construtor Clonador
public Pessoa(Pessoa pessoa){
this.nome = pessoa.getNome();
this.endereco = new Endereco(pessoa.getEndereco());
}
}
public class Endereco {
private String descricao;
public Endereco(){}
public Endereco(String descricao) {
this.descricao = descricao;
}
//construtor Clonador
public Endereco(Endereco endereco) {
this.descricao = endereco.getDescricao();
}
}
Desaconselho usar o clone, ou qualquer método com esse nome, para não confundir com o clone de verdade - que é um lixo. A técnica do construtor de cópia não é ruim, e um método “clone-like” também não - mas eu o chamaria de copy.
[quote=fredericomaia10]Na verdade quem falou besteira fui eu. Li justamente um trecho do texto que o AbelBueno postou e como não o li inteiro interpretei errado.
Vocês estão corretos.
Mas, particularmente não gosto da ideia do construtor. Construtor não diz o que faz, não tem nome. Prefiro a criação de um método.[/quote]
[quote=AbelBueno]Na verdade essa é uma técnica até recomendada no Effective Java, no lugar do clone.
Um cuidado que você tem que ter (e você teve no seu código) é de também recriar os objetos internos da classe.[/quote]
Estava estudando para certificação com o SCJP Sun Certified Programmer for Java 6, quando me bateu a ideia de fazer o clone através do construtor.
Tinha certeza que alguém já tinha pensado nisso antes rs… esse Joshua Bloch manja muito!
Clonar um objeto via construtor é algo que é esperado em um programa C++, onde esse tipo de coisa se chama “copy constructor”. (Em C++, quando se cria um copy constructor, também é costumeiro redefinir o operador de atribuição).
Em Java, prefere-se fazer um override do método clone.