Ontem publiquei no meu blog pessoal algumas críticas ao método clone . Eu diria que esse é um assunto um pouco delicado. Resolvi escrever um pouco aqui também em homenagem a uma discussão sobre este mesmo assunto que tivemos em uma das turmas da Academia do Arquiteto, alguns meses atrás. Antes de entrar nos detalhes, vamos deixar claro o ponto aonde vamos chegar: objetivos imutáveis podem ajudar muito na qualidade do nosso código, e estudar a linguagem Scala me ajudou a enxergar isso. Dito isso, vamos aos pormenores. O método clone tem pelo menos dois grandes problemas. O primeiro deles é conceitual. Para suportarmos operações de clone em nossos objetos, temos que implementar a interface Cloneable . Faria todo o sentido do mundo, se o método clone estivesse definido nesta interface, e não em Object . O segundo problema é de ordem mais prática. Vejamos o código abaixo, em Scala, que é o mesmo que usei no meu post mencionado acima: class A(b: B) extends Cloneable { override de