ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
1003
1003
EMPFEHLEN
-
Wenn ich eine Klasse myClass habe, die das Interface Cloneable implementiert, kann ich dann einen Copy-Konstruktor folgendermaßen schreiben?
Code java:1 2
public myClass (myClass m) { this = (myClass)m.clone(); }
Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons
Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.
-
Hallo,
das wird so nicht klappen. this ist keine Variable, deshalb darf es nicht auf der linken Seite einer Zuweisung auftreten.
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
Ist es denn überhaupt üblich, bzw. sinnvoll, einen Copy-Konstruktor zu implementieren? Eigentlich ist er redundant, wenn es eine passende clone()-Methode gibt.
Und warum muss clone() immer Object zurückgeben?Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons
Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.
-
18.03.10 14:20 #4
Hallo,
ich würde statt dem Konstruktor eine statische Factory-Methode verwenden:
Code java:1 2 3 4 5
public static MyClass clone( MyClass source ) throws CloneNotSupportedException { MyClass clone = ( MyClass ) source.clone(); return clone; }
Grüße
Vincent"Any sufficiently advanced technology is indistinguishable from magic." Arthur C. Clarke.
-
18.03.10 14:25 #5
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.Wozu sollte das gut sein? Um dann
statt einfach nur:Code java:1
MyClass b = MyClass.clone(b);
schreiben zu können? Find ich nicht sinnvoll.Code java:1
MyClass b = a.clone();
Ein Kopierkonstruktor ist in Java nicht üblich. Diesem Konstruktor kommt ja auch keine besondere Bedeutung (wie z.B. in C++) zu.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Wenn ich mich recht erinnere hat der Prof in der Vorlesung gesagt, man sollte möglichst immer einen Kopierkonstruktor schreiben. Wenn man dann noch eine clone() Methode will, besteht der Rumpf der Methode nur aus "return new MyClass(original);"
-
18.03.10 14:27 #7
Es gibt ja schon einige vorgefertigte Klassen mit Copykonstructoren. (Denke ich, habe ich noch nie verwendet.)
z. B. Font, also unüblich ist es wohl eher nicht.
Aber warum drehst du es nicht einfach um?
Also statt dass du in clone die Variablen überträgst, und es im Constructor aufrufst, übertrage doch im Constructor die Variablen auf das neue Objekt und rufe in clone beim erzeugen dieses den Konstructor auf.Mein kleiner webstart Projektplaner:
http://178.77.101.236/ppws/
Ideen, Verbesserungsvorschläge, Bugsmeldungen und allg. Kritik erwünscht und erbeten.
Danke. :)
-
18.03.10 14:31 #8
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.Du hast recht. Siehe z.B. http://www.javapractices.com/topic/TopicAction.do?Id=12
Man sollte wohl die clone Methode lieber in Ruhe lassen: http://www.javapractices.com/topic/TopicAction.do?Id=71
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
18.03.10 14:39 #9
Das könnte schon sinnvoll sein, um dort z.B. das Exception-Handling einzubauen, die source-Instanz auf null zu prüfen, eventuell um bestimmte Felder der source-Instanz ebenfalls durch eine clone() Methode zu kopieren. Man kann sich auch vorstellen, einige Felder wieder auf default-Wert zu setzen. Das kommt immer auf die konkrete Implementierung an. Mit einer Factory-Metzode vermeidet man redundanten Code.
Grüße
Vincent"Any sufficiently advanced technology is indistinguishable from magic." Arthur C. Clarke.
-
Dies war auch der Ansatz, den ich intuitiv verfolgt habe (mir war gar nicht bewusst, wie viele Gründe es noch gibt, diese Vorgehensweise zu wählen). Ich dachte aber, ich könnte das shallow copy nutzen, um mir das Kopieren von Variablen primitiver Datentypen zu ersparen, wenn ich die Vorgehensweise umkehre. Es wird übrigens empfohlen, den Copy-Konstruktor als protected zu deklarieren. Eine genauere Diskussion zu dem Thema habe ich in Why Copying an Object is a terrible thing to do? gefunden. Dort wird übrigens auch erklärt, warum es sinnvoll ist, clone() weiterhin zu unterstützen.
Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons
Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.
Ähnliche Themen
-
Zeiger auf Zeiger - char Zeichenanzahl ausgeben - strlen?
Von SebastianHL im Forum C/C++Antworten: 0Letzter Beitrag: 27.12.07, 16:08 -
Konstruktor überschreiben in VB6.0... wie?!
Von CoderChris im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 17.09.07, 10:36 -
Zeiger an Konstruktor übergeben
Von LukeS im Forum C/C++Antworten: 2Letzter Beitrag: 31.07.07, 14:02 -
Copy-Konstruktor
Von squeaker im Forum Delphi, Kylix, PascalAntworten: 1Letzter Beitrag: 25.09.06, 14:33 -
Zeiger auf Zeiger nicht verstanden
Von Razorhawk im Forum C/C++Antworten: 6Letzter Beitrag: 17.10.05, 12:24





Zitieren

Login





