Pourquoi était pas .clone()
méthode indiquée dans le java.lang.Cloneable
interface?
Réponses
Trop de publicités?En gros, c'est une fracture de l'interface. Ken Arnold et Bill Venners discuté en Java Problèmes de Conception.
Arnold:
Si je devais être en Dieu, à ce point, et beaucoup de gens sont probablement heureux je ne suis pas, je dirais déprécier
Cloneable
et ont unCopyable
carCloneable
a des problèmes. Outre le fait que c'est mal orthographié,Cloneable
ne contient pas l'clone
méthode. Cela signifie que vous ne pouvez pas tester si quelque chose est une instance de l'Cloneable
, jette -Cloneable
, et d'invoquerclone
. Vous devez utiliser la réflexion de nouveau, ce qui est affreux. C'est seulement un problème, mais je serais certainement résoudre.
Voir ce bogue dans la base de données des bogues Java:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4098033
Essentiellement, il s'agit d'un défaut de conception dans les versions antérieures de Java qu'ils n'ont pas l'intention de corriger dans l'interface Cloneable, car cela romprait la compatibilité avec du code existant.
En Java, il y a cette étrange notion de marqueur interfaces. L' Cloneable
interface n'a pas de méthodes ou de champs et ne sert qu'à identifier la sémantique de clonable.
à partir de la dev-x site web:
Souvent, vous allez venir à travers des interfaces en Java qui n'ont pas de comportement. En d'autres termes, ils sont tout simplement vide de définitions de l'interface. Ceux-ci sont connus en tant que marqueur des interfaces. Quelques exemples de marqueur dans les interfaces de l'API Java comprennent:
Sur le projet sur lequel je travaille, nous avons créé une interface appelée PublicCloneable, elle contient la méthode clone et spécifie qu'elle est publique.
Je trouve celle-ci utile: le fait qu'il existe une méthode de clonage, mais que vous ne pouvez pas y accéder n'aide pas beaucoup.
interface publique PublicCloneable étend Cloneable { clone d'objet public (); }