Clonen
-
Hallo,
ich habe in meiner Klasse die clone()-Methode implementiert.
public class MeineKlasse extends JComponent implements Cloneable { private Polygon[] polygon; public Object clone() { try { MeineKlasse cloned = (MeineKlasse) super.clone(); cloned.polygon = (Polygon[]) polygon.clone(); return cloned; } catch(Exception e) { throw new InternalError(e.toString()); } } }
später klone ich ein Objekt der Klasse "MeineKlasse" in einer Schleife:
//for-Schleife MeineKlasse cloned = (MeineKlasse) ((MeineKlasse) components[i]).clone(); Polygon[] cPolygon = cloned.getPolygons(); for(int j=0; j< cPolygon.length; j++) { cPolygon[j].translate(10,10); }
Leider wird die Methode translate an dem "Original"-Objekt aufgerufen (dadurch, dass ich die "Original"-Polygone zeichne, merke ich dann, dass sie sich verschieben).
Habe ich mit
cloned.polygon = (Polygon[]) polygon.clone();
nicht eine Array-Kopie erstellt ?
danke
kati
-
Mit dieser Anweisung
cloned.polygon = (Polygon[]) polygon.clone();
hast du nur das Array als ein Object kloniert (flacher Klone (engl. shallow clone) des Arrays). Nicht seine Elemente.
Wenn du auch die Elemente des Arrays klonieren willst, danncloned.polygon = new Polygon[polygon.length]; for(int i = 0; i < polygon.length; ++i) cloned.polygon[i] = (Polygon)polygon[i].clone();
ist das richtige Herangehens (tiefer Klone des Arrays (engl. deep clone) ) bei der Lösung des Problems.
-
hallo,
ich dachte, das könnte ich mir sparen. Dann muss ich ja eine Methode schreiben, die mir einfach alles kopiert.