Frage

Warum wurde nicht die .clone() Methode in der java.lang.Cloneable Schnittstelle angegeben?

War es hilfreich?

Lösung

Im Grunde ist es eine defekte Schnittstelle. Ken Arnold und Bill Venners diskutiert es in Java Design-Wichtungen .

Arnold:

  

Wenn ich Gott an dieser Stelle sein, und viele Menschen sind wahrscheinlich froh, dass ich mich nicht, würde ich deprecate Cloneable sagen und eine Copyable haben, weil Cloneable Probleme hat. Neben der Tatsache, dass es falsch geschrieben ist, wird Cloneable nicht die clone Methode enthalten. Das heißt, Sie nicht testen können, ob etwas eine Instanz von Cloneable ist, muss er in Cloneable und rufen clone. Sie haben wieder Reflexion zu verwenden, was schrecklich ist. Das ist nur ein Problem, aber das ich sicherlich lösen würde.

Andere Tipps

Sehen Sie diesen Fehler in der Java Bugdatenbank:

http://bugs.sun.com/bugdatabase/view_bug.do? bug_id = 4098033

Im Wesentlichen ist dies ein Konstruktionsfehler in früheren Versionen von Java, dass sie nicht, wie in der klonbar Schnittstelle zu beheben beabsichtigen, dies zu tun wäre die Kompatibilität mit einigem vorhandenen Code brechen.

In Java gibt es dieses Konzept der Marker-Schnittstellen. Die Cloneable Schnittstelle hat keine Methoden oder Felder und dient nur dazu, die Semantik des Seins klonbar zu identifizieren.

vom dev-x Webseite:

  

Oft werden Sie kommen über Schnittstellen in Java, die kein Verhalten. Mit anderen Worten, sie sind nur leere Schnittstellendefinitionen. Diese werden als Marker Schnittstellen bekannt. Einige Beispiele für Marker-Schnittstellen in dem Java-API enthalten:

     

Auf dem Projekt arbeite ich an, haben wir eine Schnittstelle geschaffen genannt PublicCloneable, es enthält die Klon-Methode und gibt an, dass es öffentlich ist.

Ich finde das eine nützlich: die Tatsache, dass es eine Klon-Methode ist, aber Sie können nicht darauf zugreifen nicht sehr viel nicht helfen

.
public interface PublicCloneable extends Cloneable {
    public Object clone();
}

Da die Klon-Methode wird in der Objektklasse implementiert aufgrund seines „besonderen“ Zustand. Die Speicherkopie von Objekten jeglicher Art

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top