33 votes

Java: justification de l'interface clonable

Pourquoi était pas .clone() méthode indiquée dans le java.lang.Cloneable interface?

36voto

Bill the Lizard Points 147311

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 un Copyablecar Cloneable 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'invoquer clone. Vous devez utiliser la réflexion de nouveau, ce qui est affreux. C'est seulement un problème, mais je serais certainement résoudre.

10voto

David M Points 45808

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.

6voto

Peter Perháč Points 8007

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:

5voto

Nicolas Points 600

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 ();
}

1voto

fbinder Points 5613

Parce que la méthode clone est implémentée dans la classe Object en raison de sa condition "spéciale": la copie mémoire des objets de toute nature.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X