B
by Value
Gast
Hallo,
ich habe eine Klasse, diese einthaelt verschiedene Objekte. So - ich will von dieser Klasse nun eine exakte Copie in eine Variable uebergeben, dh. wenn ich was ander Kopie aendere soll sich der Inhalt des Originals nicht aendern (by value also). Wie mach ich das - ich dachte Java kennt kein by Reference, irgendwie trixt mich das anscheinend dauernd aus?
Ich hab ein Demo geschrieben dazu - wie man sieht, wird alles by value kopiert, bis auf das Objekt der "eigenen Klasse", muss ich dort etwa auch noch so eine klon-methode einbauen?? In der Realitaet habe ich ein Objekt einer Klasse, abgeleitet von ArrayList fuer wiederum eigene Panelklassen - geht das in Java nicht einfacher oder muss ich nun diese saemtlichen Klassen umschreiben, bzw mit dieser Funktion ergaenzen?
ich habe eine Klasse, diese einthaelt verschiedene Objekte. So - ich will von dieser Klasse nun eine exakte Copie in eine Variable uebergeben, dh. wenn ich was ander Kopie aendere soll sich der Inhalt des Originals nicht aendern (by value also). Wie mach ich das - ich dachte Java kennt kein by Reference, irgendwie trixt mich das anscheinend dauernd aus?
Ich hab ein Demo geschrieben dazu - wie man sieht, wird alles by value kopiert, bis auf das Objekt der "eigenen Klasse", muss ich dort etwa auch noch so eine klon-methode einbauen?? In der Realitaet habe ich ein Objekt einer Klasse, abgeleitet von ArrayList fuer wiederum eigene Panelklassen - geht das in Java nicht einfacher oder muss ich nun diese saemtlichen Klassen umschreiben, bzw mit dieser Funktion ergaenzen?
Code:
package muell;
import java.util.ArrayList;
import javax.swing.JPanel;
public class Klebrig {
ArrayList<JPanel> pList;
Schwampf sch;
private class Schwampf{ // das eigene Objekt
private String inhalt = "leer";
public String getString(){return this.inhalt;}
public void setString(String i){this.inhalt = i;}
}
ArrayList<String> list;
String str;
int idx;
// main & start des prg's
public static void main(String[] args) { Klebrig klebrig = new Klebrig(); klebrig.start();}
public void start(){
Klebrig nudel = new Klebrig();
System.out.println("Vor der Kopie: ");
status(nudel);
Woanders wa = new Woanders(nudel);
System.out.println("\nWoanders und Zustand der Kopie");
status(wa.getKlon());
System.out.println("\n..und das Original:");
status(nudel);
}
// leerer ctor
public Klebrig(){
this.list = new ArrayList<String>();
this.str = "vanilla";
this.idx = 0;
this.sch = new Schwampf();
this.pList = new ArrayList<JPanel>();
}
// eine eigene methode zum klonen
public Klebrig clown() {
Klebrig k = new Klebrig();
ArrayList<String> l = new ArrayList<String>();
for(int cnt=0; cnt<this.getList().size(); ++cnt) l.add(this.getList().get(cnt));
k.setList(l);
k.setStr(this.getStr());
k.setI(this.getI());
k.setSchwampf(this.getSchwampf());
ArrayList<JPanel> p = new ArrayList<JPanel>();
for(int cnt=0; cnt<p.size(); ++cnt) p.add(this.getPList().get(cnt));
k.setPList(p);
return k;
}
// get/set
public void setList(ArrayList<String> l){this.list = l;}
public ArrayList<String> getList(){return this.list;}
public void setStr(String s){this.str = s;}
public String getStr(){return this.str;}
public void setI(int i){this.idx = i;}
public int getI() {return this.idx;}
public Schwampf getSchwampf(){ return this.sch; }
public void setSchwampf(Schwampf s){this.sch = s; }
public ArrayList<JPanel> getPList(){return this.pList; }
public void setPList(ArrayList<JPanel> pl){ this.pList = pl;}
// output
public static void status(Klebrig k){ System.out.println( "Laenge der list: " + k.getList().size()
+ "\nstr: " + k.getStr()
+ "\nint: " + k.getI()
+ "\neigene Klasse: " + k.getSchwampf().getString()
+ "\nLaenge der pList: " + k.getPList().size()); }
/*
*
*/
private class Woanders{
private Klebrig klon = new Klebrig();
public Woanders(Klebrig k){
// kopier1(k); // geht nich
kopier2(k); // geht teilweise
doMassaker();
}
// kopieren aber WIE ???
// public void kopier1(Klebrig k){ this.klon = k; }
public void kopier2(Klebrig k){ this.klon = k.clown(); }
// ein paar Veraenderungen
public void doMassaker(){
klon.getList().clear();
klon.getList().add("Sie");
klon.getList().add("haben");
klon.getList().add("Gewonnen!");
klon.setI(9999999);
klon.setStr("$$$$$$$$$$$$$");
klon.getSchwampf().setString("############");
klon.getPList().clear();
klon.getPList().add(new JPanel());
klon.getPList().add(new JPanel());
klon.getPList().add(new JPanel());
}
public Klebrig getKlon(){ return this.klon; }
}
}