Clonar objeto a partir do construtor da propria classe
10 respostas
freakazoid
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??
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.
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.
freakazoid
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.
Um amigo aqui da empresa disse a mesma coisa.
freakazoid
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.
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!
Obrigado pelas dicas pessoal
Abs!
E
entanglement
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.
jcranky
Na teoria sim. Na prática, melhor evitar. Vide Joshua Boch, Effective Java.