Unterschiedliche Clone- Methoden

pl4gu33

Top Contributor
ich hab nen bisschen hier im Forum geschaut und hab 2 Methoden zum Klonen von Objekten gefunden,...

so wie ich das sehe, ist Cloneable eine flache Kopie und das zweite eine tiefe Kopie?
gibt es da sonst noch irgendwelche Probleme/Unterschiede, die man beachten sollte? (außer, dass die Interfaces nicht implementiert sind)

Java:
public class Clonetest implements Cloneable,Serializable{
	private JLabel lbl;
	private int zahl;
	
	public static void main(String[] args){
		Clonetest ct=new Clonetest();
		ct.lbl=new JLabel("test");
		ct.zahl=5;
		
		Clonetest ct1=ct.clone();
		ct1.zahl=6;
		ct1.lbl.setText("Test2");		
		System.out.println(ct1.lbl.getText());
		System.out.println(ct.lbl.getText());
		System.out.println(ct1.zahl);
		System.out.println(ct.zahl);
		
		System.out.println("---------");
		
		Clonetest ct2=Clonetest.clone2(ct);
		ct2.zahl=7;
		System.out.println(ct2.zahl);
		System.out.println(ct.zahl);
		ct2.lbl.setText("Test3");		
		System.out.println(ct2.lbl.getText());
		System.out.println(ct.lbl.getText());
		
	}

	public Clonetest clone() {	
	try {
		return (Clonetest) super.clone();
	} catch (CloneNotSupportedException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}	
	return null;
	}
	
	public static Clonetest clone2(Clonetest copyObject){
		   try {
			      ByteArrayOutputStream baos = new ByteArrayOutputStream(4096);
			      ObjectOutputStream oos = new ObjectOutputStream(baos);
			      oos.writeObject(copyObject);
			      ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
			      ObjectInputStream ois = new ObjectInputStream(bais);
			      Clonetest deepCopy = (Clonetest) ois.readObject();
			      return deepCopy;
			    } catch (IOException e) {
			      e.printStackTrace();
			    } catch(ClassNotFoundException e) {
			      e.printStackTrace();
			    }
			    return null;
	}
}
 

Fant

Bekanntes Mitglied
Die erste Variante ist schon ein wenig geschummelt, da ja einfach nur die clone-Methode der super-Klasse aufgerufen wird. Kann reichen, wird es idR aber wohl eher nicht.
Die zweite Variante funktioniert nur bei serialisierbaren Klassen.

clone() sollte eigentlich grundsätzliche eine tiefe Kopie erzeugen(, oder irre ich da?)

Gruß Fant
 
G

Gast2

Gast
Nein, clone() erzeugt keine tiefe Kopie von Objekten. Da muss man sich selber drum kümmern.
 

Fant

Bekanntes Mitglied
Dass clone() von Object das i.A. nicht macht ist klar. Das hat ja der Themenersteller auch schon festgestellt. Ich meinte, dass man clone() in seiner eigenen Klasse so implementieren sollte, dass eine tiefe Kopie erstellt wird, weil es doch sonst kein "richtiger" Klon ist.
Oder hast du dich jetzt gar nicht auf meinen Post bezogen?
 
Zuletzt bearbeitet:
G

Gast2

Gast
Doch, hab mich schon auf dich bezogen. Hatte gedacht du meinst mit clone() die Methode aus Object ;)
Ich würde auch nicht sagen dass man grundsätzlich immer tiefe Kopien erzeugen sollte. Wenn du Beispielsweise immutable Klassen hast brauchst du keine tiefe Kopie, da kannst du dir den overhead sparen.
 
Zuletzt bearbeitet von einem Moderator:

pl4gu33

Top Contributor
okay also schließe ich daraus, dass es keine weiteren Probleme bei den Methoden gibt und ich sie auch soweit richtig gedeutet habe ... danke schon mal an euch beide^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
rosima26 Unterschiedliche Werte bei return/print Allgemeine Java-Themen 12
M Warum gibt es Unterschiedliche Kommentar Zeichen Allgemeine Java-Themen 15
Y Java Methoden unterschiedliche Zahlenreihen Allgemeine Java-Themen 2
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
P Berechnungen: unterschiedliche Rundungsfehler bei Long? Allgemeine Java-Themen 3
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
J unterschiedliche Dateiformate verarbeiten Allgemeine Java-Themen 7
J unterschiedliche Objekte, selbe getter und setter Allgemeine Java-Themen 15
G Methoden Unterschiedliche viele Parameter Allgemeine Java-Themen 17
A TXT File einlesen unterschiedliche Zeilenlänge Allgemeine Java-Themen 9
GianaSisters Klassen Unterschiedliche Zeiten bei DATE Allgemeine Java-Themen 6
G Input/Output URLDecoder.decode - Unterschiedliche Ergebnisse Windows / Linux Allgemeine Java-Themen 2
A md5 liefert unterschiedliche Testsummen? Allgemeine Java-Themen 4
M Unterschiedliche Java-Versionen Allgemeine Java-Themen 5
B hashtable für unterschiedliche Typen - mit Generics Allgemeine Java-Themen 8
S Zugriff auf unterschiedliche JREs Allgemeine Java-Themen 7
G Abstrakte Fabrik für unterschiedliche Signaturen? Allgemeine Java-Themen 7
L unterschiedliche Größe beim serialisieren eines Objektes! Allgemeine Java-Themen 6
W Unvollständige und unterschiedliche CharSets Allgemeine Java-Themen 3
L Unterschiedliche mails (Daten aus JTable) schicken Allgemeine Java-Themen 14
U Transparent Buttons - unterschiedliche Java-Versionen Allgemeine Java-Themen 8
M unterschiedliche Betriebssysteme abfangen Allgemeine Java-Themen 3
J Methoden clone(), arraycopy(): ein- und zweidimensionale Arrays Allgemeine Java-Themen 8
A deepcopy mit clone() Allgemeine Java-Themen 2
R Gleiche Objektreferenz trotz clone()? Allgemeine Java-Themen 12
H Frage zu clone() Allgemeine Java-Themen 5
xehpuk clone() wegen leerem Cloneable quasi nutzlos? Allgemeine Java-Themen 6
M Überschreiben der clone()-Methode Allgemeine Java-Themen 10
G Object mit clone kopieren Allgemeine Java-Themen 21
R Eigenes Objekt - clone() Allgemeine Java-Themen 2
V clone() ? Allgemeine Java-Themen 4
T abstract + clone() = BUMM! Allgemeine Java-Themen 3
J immutable HashMaps und clone() Allgemeine Java-Themen 3
M Gibt es eigentlich einen Standalone-Java-ICQ-clone Allgemeine Java-Themen 19
M clone-methode nicht verfügbar Allgemeine Java-Themen 10
0 Keine clone-Methode für BigDecimal und BigInteger? Allgemeine Java-Themen 3
M Problem mit Generics und clone() Allgemeine Java-Themen 2
K The method clone() from the type Object is not visible. Allgemeine Java-Themen 9
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
B Arrays von Methoden möglich? Allgemeine Java-Themen 44
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
N abstracte klassen methoden Allgemeine Java-Themen 32
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
B Methoden Java Getter und Setter Methoden Allgemeine Java-Themen 9
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
F Sich automatisch aufrufende Java-Methoden Allgemeine Java-Themen 2
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
D Methoden Methoden anpassen und fehlende Funktionen hinzufügen Allgemeine Java-Themen 475
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
R Statistische Methoden (Mathematik) Aufgabe Allgemeine Java-Themen 9
X Brüche kürzen mittels Methoden und ggT Allgemeine Java-Themen 15
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
L mehrere Methoden Allgemeine Java-Themen 19
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
A Automatisches Methoden Laufzeiten logging? Allgemeine Java-Themen 7
M Quellcode von Java-Methoden Allgemeine Java-Themen 9
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
Q-bert Methoden Methoden in Java Allgemeine Java-Themen 13
D Methoden Java-Aufgabe Allgemeine Java-Themen 2
M Compiler-Fehler Methoden-Referenz Allgemeine Java-Themen 5
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
F Enum-werte als Methoden-Parameter übergeben Allgemeine Java-Themen 6
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
E OOP Objekte und Methoden Allgemeine Java-Themen 1
K Java ruft Methoden nicht der Reihe nach auf Allgemeine Java-Themen 14
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
T Java Array in Methoden Allgemeine Java-Themen 1
D Code für bereitgestellte Methoden Allgemeine Java-Themen 1
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
A Methoden verändern Allgemeine Java-Themen 12
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
J Best Practice Testen von protected Methoden Allgemeine Java-Themen 7
L Methoden "Schiffe versenken" Quellcode in Methoden umwandeln Allgemeine Java-Themen 6
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
Sogomn Best Practice "Doppelte" Methoden Allgemeine Java-Themen 3
Paul15 String Methoden Allgemeine Java-Themen 7
G Methoden BMI -Wert Aufgabe(Methoden) Allgemeine Java-Themen 4
F Testen von Methoden Allgemeine Java-Themen 3
S "Vererben" statischer Felder/Methoden Allgemeine Java-Themen 4
F Methoden in der Enumeration Klasse Allgemeine Java-Themen 1
S Methoden ohne Methodenkopf ?! Allgemeine Java-Themen 5
T Überschreiben von Methoden Allgemeine Java-Themen 6
M Methoden werden in falscher Reihenfolge bearbeitet Allgemeine Java-Themen 10
S Methoden Methoden überschreiben Allgemeine Java-Themen 3
N Threads statische Methoden in Threads Allgemeine Java-Themen 5
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
A also definition von klassen und string methoden und algorithmik Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben