Java: Fundamentação da interface Cloneable
-
22-08-2019 - |
Pergunta
Por que não foi o método .clone()
especificada na interface java.lang.Cloneable
?
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 umCopyable
, porqueCloneable
tem problemas. Além do fato de que ele é mal escrito,Cloneable
não contém o métodoclone
. Isso significa que você não pode testar se algo é uma instância deCloneable
, lançá-lo aosCloneable
, e invocarclone
. 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