Referenzen in Java - Fehlerpotenzial !

Status
Nicht offen für weitere Antworten.
Hallo,
ich arbeite an einer Scheduling-Anwendung mit Threads und Vektoren. Habe mich soweit durchgekämpft und muss nun feststellen, dass die implementierten Algorithmen zwar arbeiten, die Lösungen aber allesamt ungültig werden.
Ich speichere Zeitpläne mit einzelnen Operationen (Objekt-Klasse Operation, selbst angelegt) als Vektoren ab. Die benötigten Operationen beziehe ich aus einer Datei, in der das zu berechnende Problem gespeichert ist. Es ergibt sich eine Sammlung an einzuplanenden Operationen (als Vektor angelegt). Ich erstelle in jeder Methode/Iteration eine Instanz des Ausgangs-Vektors und plane damit weiter. Das ist aber wohl nur eine Referenz und keine echte Kopie. Aus diesem Operations-Vektor nehme ich jeweils eine einzuplanende Operationen raus und plane sie mit verschiedenen zusätzlichen berechneten Werten (Startzeit, Endzeit etc.) ein. Danach wird die (Teil-)Lösung als Objekt-Klasse Solution gespeichert, eine andere geladen und weiter bearbeitet (ist ne Art Agentensystem).

So schön so gut - läuft auch alles ohne Probleme. Wenn ich nun aber bei weiterem Planungsverlauf eine komplette Lösung erhalten habe und die ausgebe, stimmen die Startzeiten etc. hinten und vorne nicht mehr. Ich weiss aber, dass der Algorithmus hinhaut!
Meine Befürchtung (fast schon Gewissheit):
Der eigentlich unveränderliche Operations-Vektor verändert sich durch Entnahme und Weiterverarbeitung von Operationen !!!!
Eingeplante Operationen (mit Referenz vom Orig-Operations-Vektor) scheinen mit vergebenen Startzeiten an den Orig-Vektor zurückgegeben/ -verwiesen und bei neuen Einplanungsschritten aufgegriffen zu werden.
Das ist schlecht !!!

Da ich bis dato viel (zuviel ;-) ) mit Vectoren hantiert habe, schwirrte schon des öfteren die Methode 'clone()' mit d. Interface 'Cloneable' durch mein Kalkül. Komm ich da noch drum herum?
Hat jemand Erfahrungen damit und kann mir evtl. eine Vorgehensweise empfehlen? Gibt es ein verständliches (deutsches?) Tutorial dafür? In allen Büchern, die ich so rumliegen habe, sind darüber nur fadenscheinige Äußerungen zu finden. Am detailliertesten ist noch "Thinking in Java" (Bruce Eckel). Trotzdem nicht richtig verständlich.
Ich vermute, dass ich, wenn clone() zum Einsatz kommen muss, alle Objekte (d.h. alle aber auch alle), die irgendwo verarbeitet werden, gecloned werden müssen. Hat jemand einen Tipp?

Vielen Dank schon jetzt,
chris
 
Die Frage ist ob er bei clone den Inhalt mitübernimmt, daher mach das mal 😉

Code:
Vector alter = new Vector();

//alter wird mit daten befüllt

Vector new = Vector(alter); //ist kopie mit Inhalt
 
egal ob mit new oder über clone... wenn man die referenzen der objekte ändert die die Vectoren halten hilft beides nichts...

daher - wenn clonen dann musst du auch die Elemente die der Vector hält clonen !!
 
das hiesse dann:
wenn eine Lösung (Solution) einen Vector mit Operationen (Klasse Operation) hat, sollte die Klasse Operation Cloneable sein. Eine Operation hat namen, Vorgaenger, nacholger, startzeit etc.; alle diese Werte muessen auch gecloned sein, richtig? na ich versuchs mal (ziehe aber besser vorher ein backup .... ;-) )
 
frenchCollection hat gesagt.:
das hiesse dann:
wenn eine Lösung (Solution) einen Vector mit Operationen (Klasse Operation) hat, sollte die Klasse Operation Cloneable sein. Eine Operation hat namen, Vorgaenger, nacholger, startzeit etc.; alle diese Werte muessen auch gecloned sein, richtig? na ich versuchs mal (ziehe aber besser vorher ein backup .... ;-) )
sie muss nicht nur cloneable sein - du musst auch sie explizit klonen !!
d.h.
Code:
Vector v2 = (Vector)v1.clone();
reicht nicht wenn die elemente des Vectors v1 Cloneable sind !
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben