Java: Rationale des klonbar Schnittstelle
-
22-08-2019 - |
Frage
Warum wurde nicht die .clone()
Methode in der java.lang.Cloneable
Schnittstelle angegeben?
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 eineCopyable
haben, weilCloneable
Probleme hat. Neben der Tatsache, dass es falsch geschrieben ist, wirdCloneable
nicht dieclone
Methode enthalten. Das heißt, Sie nicht testen können, ob etwas eine Instanz vonCloneable
ist, muss er inCloneable
und rufenclone
. 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