Tiefe Kopie |
18.01.2015, 15:18 | Auf diesen Beitrag antworten » | |||||||||
neuling96 | Tiefe Kopie Folgender Code stellt eine Tiefekopie dar
Was ist am Code nicht optimal gelöst? 1. Wenn ich eine beliebige Klasse habe also beliebige Klasse h= new beliebige Klasse(); beliebige Klasse x= h.clone();// habe ich damit einen tiefe kopie erstellt? 2. zu der eig. Frage, weiß ich nicht.. |
|||||||||
|
||||||||||
18.01.2015, 17:28 | Auf diesen Beitrag antworten » | |||||||||
Karlito | RE: Tiefe Kopie
Nicht unbedingt. 1. Clone ist standardmäßig von der Sichtbarkeit protected 2. Das Standardverhalten von clone ist folgendermaßen: - Wenn das Interface Cloneable nicht implementiert ist, wird eine CloneNotSupportedException geworfen - Wenn Cloneable Implementiert wird wird das Objekt flach kopiert. D.h. referenzierte Objekte werden nicht Kopiert, sondern nur deren Referenz.
Hier wird eine flache Kopie des Objektes erzeugt (manuell), aber keine tiefe Kopie. Das array des neues Objektes ist eine Referenz auf das Array des alten Objektes und somit arbeiten beide Objekte mit genau dem selben Array (und keinen separaten Kopien). Soetwas kann gewollt sein, somit wäre clone() aber eben nicht dazu geeignet eine tiefe Kopie des Objektes zu erzeugen.
Ich nehme an, dass es darauf anspielt, dass das Kopieren des Arrays ineffektiv ist, da immer nur ein Element kopiert wird. Es ist oft effektiver mehrere Elemente gleichzeitg zu kopieren. Damit man sich nicht um die optimale Implementierung kümmern muss, stellt Java eine Methode bereit um Arrays effektiv zu kopieren. Es wäre auch möglich, dass darauf angespielt wird, dass clone() immer Object zurückgibt und immer auf den eigentlichen Typ gecastet werden muss. Lösung wäre eine Methode anzulegen, bei der der Rückgabetyp korrekt ist. Leider ist das nicht mit dem Interface Cloneable vereinbar. Gruß, Karlito |
|||||||||
18.01.2015, 20:27 | Auf diesen Beitrag antworten » | |||||||||
neuling96 | danke ich habs noch ganz verstanden, aber das kommt hoffentlich |
|||||||||
19.01.2015, 07:44 | Auf diesen Beitrag antworten » | |||||||||
Karlito | Achso, was ich vergessen habe ist die Methode, die das Kopieren von Arrays übernimmt: System.arraycopy() |
|||||||||
Anzeige | ||||||||||
|
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |