Obligatorische cloneable-interface in Java
Ich habe da ein kleines problem in Java. Ich habe ein interface namens Modifizierbar. Objekte, die diese Schnittstelle implementiert, sind Veränderbar.
Ich habe auch ein ModifyCommand Klasse (mit dem Befehl Muster) erhalten, dass zwei Modifizierbaren Objekte (vertauschen Sie in einer Liste weiter auf - das ist nicht meine Frage, ich habe die Lösung schon).
Den ModifyCommand Klasse beginnt, indem Sie Klone von den Modifizierbaren Objekte. Logisch, ich habe meine Änderbar interface extends Cloneable. Die Schnittstelle definiert dann eine clone () - Methode, mit deren implementierende Klassen neu definieren müssen.
Dann, in ModifyCommand, was ich tun kann : firstModifiableObject.clone(). Meine Logik ist, dass die Klassen der Umsetzung Modifizierbar wird, neu zu definieren, die clone-Methode von Object, wie Sie sein werden, Cloneable (das ist, was ich tun will).
Die Sache ist, wenn ich die Definition von Klassen implementiert Modifizierbar und ich wollen zum überschreiben der clone () -, es wird nicht lassen Sie mich die besagt, dass die clone () - Methode aus der Klasse Object verbirgt, die man vom Modifizierbar.
Was soll ich tun? Ich bin unter dem Eindruck, dass "ich mache das falsch"...
Dank,
Guillaume.
Edit : man denke ich vergessen, wird die clone () - Sache. Ich werde entweder a) davon ausgehen, dass das übergebene Objekt das Veränderbare Objekt (Implementierung der Schnittstelle) wird bereits geklont oder b) eine andere Methode, genannt, zum Beispiel, copy(), das wäre im Grunde tun eine deep-copy der Änderbaren Objekts (oder vielleicht die Generische Lösung funktionieren wird...).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie java 1.5 oder höher, können Sie das Verhalten, das Sie möchten, und entfernen Sie Gießen Weg:
Da Foo extends Object diese trotzdem erfüllt der ursprüngliche Vertrag, der von der Object-Klasse. Code, der nicht verfeinern Sie die clone () - Methode korrekt wird nicht kompiliert, wegen der zusätzlichen Einschränkungen, die durch die Veränderbare Benutzeroberfläche. Als ein bonus, der aufrufende code muss nicht gegossen das Ergebnis der clone-Methode.
Brauchen Sie nicht neu zu definieren, die clone-Methode auf die Schnittstelle Veränderbar.
Überprüfen Sie die Dokumentation: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Cloneable.html
Ich verstehe, dass Sie versuchen zu zwingen, alle zum überschreiben der clone-Methode(), aber Sie können es nicht tun.
In einer anderen Weise, die Sie nicht überschreiben kann eine Klasse auf ein interface:
Die clone () - Methode ist immer verbunden mit der Object.class und nicht das cloneable-interface. Die kann man einfach überschreiben, es auf ein anderes Objekt, nicht in einem interface.
Hinzufügen, um Sean Reilly Antwort, dies sollte Ihr problem lösen, und mehr typsicher. Es kompiliert und läuft bei mir einwandfrei auf JDK6:
Konnte ich nicht testen Sie es mit Java 5, weil ich habe es nicht installiert, aber ich denke, es würde funktionieren.
Haben, definieren Sie die Signatur genau so, wie es im Objekt?
Diese stellen - fügen Sie benutzerdefinierte code auf den Körper. Wikipedia war überraschend hilfreich auf diese ein.
Was bedeutet Ihre Signatur der Methode für Ihre clone-Methode Aussehen? Für das mit dem Clonable-interface müsste es ein Objekt zurückgeben. Wenn Sie deklarieren es als Rückgabe ein Modifizierbaren dann, dass das problem sein könnte.
public class CloningExample implements Cloneable {
}