Pergunta

Por que não foi o método .clone() especificada na interface java.lang.Cloneable?

Foi útil?

Solução

Basicamente, é uma interface quebrado. Ken Arnold e Bill Venners discutido na Java design Questões .

Arnold:

Se eu fosse Deus, neste ponto, e muitas pessoas são provavelmente feliz que eu não sou, eu diria Cloneable deprecate e ter um Copyable, porque Cloneable tem problemas. Além do fato de que ele é mal escrito, Cloneable não contém o método clone. Isso significa que você não pode testar se algo é uma instância de Cloneable, lançá-lo aos Cloneable, e invocar clone. Você tem que usar o reflexo novamente, o que é horrível. Isso é apenas um problema, mas um eu certamente resolver.

Outras dicas

Veja este bug no banco de dados erros Java:

http://bugs.sun.com/bugdatabase/view_bug.do? bug_id = 4098033

Essencialmente, esta é uma falha de projeto em versões anteriores do Java que não estão com a intenção de correção na interface Cloneable como fazer isso seria quebrar a compatibilidade com algum código existente.

Em Java, existe este conceito de interfaces do marcador. A interface Cloneable não tem métodos ou campos e serve apenas para identificar a semântica de ser clonável.

a partir href="http://www.devx.com/tips/Tip/5266" rel="nofollow noreferrer"> dev-x site

Muitas vezes você vai se deparar com interfaces em Java que não têm comportamento. Em outras palavras, eles são apenas definições de interface vazias. Estes são conhecidos como interfaces de marcador. Alguns exemplos de interfaces de marcador no Java API incluem:

No trabalho de projecto I, nós criamos uma interface chamada PublicCloneable, que contém o método clone e especifica que é público.

I encontrar um presente útil:. O fato de que não há um método clone, mas você não pode acessá-lo não ajuda muito

public interface PublicCloneable extends Cloneable {
    public Object clone();
}

Como o método clone é implementado na classe Object, devido à sua condição de "especial":. A cópia de memória de objetos de qualquer tipo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top