[Java] Clone() werkt niet helemaal

Status
Niet open voor verdere reacties.

Rimsic

Terugkerende gebruiker
Lid geworden
15 jan 2005
Berichten
3.143
Hey,

Ik zit met een probleem. Ik heb een class 'Matrix' en die wil ik meerdere keren klonen om zo op die klonen bewerkingen te doen. Nu heb ik de klasse matrix cloneable gemaakt met

Code:
public class Matrix implements Cloneable { }
En de volgende clone gemaakt
Code:
@Override
  protected Object clone() {
	try {
	  return super.clone();
	}
	catch (CloneNotSupportedException e) {
	  // This should never happen
	  throw new InternalError(e.toString());
	}
  }
maar als ik nu het volgende doe:
Code:
Matrix tmp_m = (Matrix) m.clone();
(m is hier de originele matrix (Matrix m = new Matrix(HashMap Items)en vervolgens bewerkingen doe op tmp_m dan wordt dit ook veranderd in de originele matrix m. Wat doe ik fout?
 
clone() is eigenlijk af te raden aangezien het alleen een shallow copy maakt van een object, d.w.z.: enkel de primitieve variabelen (int, float, char, enz...) en de halve primitieve "String" worden gekopieerd. Van de objecten binnen een object worden enkel hun referenties gekopieerd, dus zowel het oude als het nieuwe object wijzen naar dezelfde interne objecten. Om deze ook volledig te kopiëren moet je een deep copy maken. Dit kan je doen door de clone() methodes te overschrijven van je object en al zijn interne objecten tot op het niveau dat er alleen primitieven overblijven of door het object als een inputstream naar een outputstream te zenden. Hiervoor verwijs ik naar google "java deep copy"
 
BTW: wat je fout doet:
Je doet een clone en zou dus een matrix moeten terugkrijgen, alleen zend je niet een matrix maar zijn superclass terug (ik weet niet wat voor een object dat is)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan