Question

Pourquoi pas la méthode de .clone() spécifiée dans l'interface java.lang.Cloneable?

Était-ce utile?

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 une Copyable, parce que Cloneable a des problèmes. Outre le fait qu'il est mal orthographié, Cloneable ne contient pas la méthode de clone. Cela signifie que vous ne pouvez pas tester si quelque chose est une instance de Cloneable, jeté à Cloneable, et invoquez clone. 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top