Java: Justification de l'interface Cloneable
-
22-08-2019 - |
Question
Pourquoi pas la méthode de .clone()
spécifiée dans l'interface java.lang.Cloneable
?
La solution
En fait, il est une interface cassée. Ken Arnold et Bill Venners discuté dans Java Problèmes de conception .
Arnold:
Si je devais être Dieu à ce moment-là, et beaucoup de gens sont sans doute heureux que je ne suis pas, je dirais
Cloneable
de Déprécier et ont uneCopyable
, parce queCloneable
a des problèmes. Outre le fait qu'il est mal orthographié,Cloneable
ne contient pas la méthode declone
. Cela signifie que vous ne pouvez pas tester si quelque chose est une instance deCloneable
, jeté àCloneable
, et invoquezclone
. Vous devez utiliser à nouveau la réflexion, ce qui est terrible. C'est un seul problème, mais je résoudrait certainement.
Autres conseils
Voir ce bogue dans la base de données de bugs Java:
http://bugs.sun.com/bugdatabase/view_bug.do? bug_id = 4098033
Pour l'essentiel, c'est un défaut de conception dans les versions antérieures de Java qui ne sont pas l'intention de fixer dans l'interface Cloneable pour le faire casserait la compatibilité avec un code existant.
En Java, il y a ce concept d'interfaces marqueurs. L'interface Cloneable
n'a pas de méthode ou de champs et ne sert qu'à définir la sémantique d'être cloneable.
de la dev-x site:
Souvent, vous rencontrerez des interfaces Java qui ont pas de comportement. En d'autres termes, ils ne sont que des définitions d'interface vides. Ceux-ci sont connus comme interfaces marqueurs. Voici quelques exemples d'interfaces marqueurs de l'API Java comprennent:
Sur le projet, je travaille, nous avons créé une interface appelée PublicCloneable, il contient la méthode clone et précise qu'il est public.
Je trouve cela un utile: le fait qu'il ya une méthode clone, mais vous ne pouvez pas accéder il ne permet pas beaucoup
.public interface PublicCloneable extends Cloneable {
public Object clone();
}
Parce que la méthode clone est mis en œuvre dans la classe d'objets en raison de son état « spécial »:. La copie mémoire des objets de toute nature