Hallo Forum,
ich habe ein Objekt mit inzwischen recht vielen Variablen, deren Werte über eine Benutzeroberfläche verändert werden können. Sobald eine Eigenschaft verändert wurde, soll ein Speicher-Button aktiviert werden. Nach jedem Speichern des Objekts wird er bis zur nächsten Änderung wieder deaktiviert, wie man das so üblicherweise von Anwendungen kennt. Um das zu realisieren, lasse ich bei jedem Speichervorgang ein Klon des Objekts erstellen und bei jeder Veränderung der Eigenschaften des aktuellen Objekts überprüfen, ob sich diese nun von denen des gespeicherten Zustands im Klon unterscheiden. Ich habe beispielsweise die String-Variable "titel". Wenn ich diese über ein Textfeld nach einer Speicherung ändere, unterscheiden sich meinObjekt.titel und meinGeklontesObjekt.titel und der Button wird entsprechend aktiviert. Ich habe aber auch eine Arraylist "datenformat", bestehend aus Strings (die die Werte Text, Zahl und Datum annehmen können). Wenn ich nun meinObjekt.datenformat.set(3,"Text") setze, wird der Wert gleichzeitig automatisch auch in meinGeklontesObjekt übernommen, so dass sich das aktuelle und das geklonte Objekt bezüglich der ArrayList nie unterscheiden und daher mein Ansatz nicht wie gewünscht funktioniert. Jetzt frage ich mich, warum das so ist. Zunächst dachte ich "aha, ArrayList=Referenzdatentyp!", aber für den einfachen String "titel" gilt das ja auch, warum verhält sich das Klonobjekt da anders? Mache ich etwas falsch oder eignet sich der Ansatz prinzipiell nicht für meine Fragestellung?
Hoffe, meine Anfängerdarstellung ist verständlich ?
Dank im Voraus!
ich habe ein Objekt mit inzwischen recht vielen Variablen, deren Werte über eine Benutzeroberfläche verändert werden können. Sobald eine Eigenschaft verändert wurde, soll ein Speicher-Button aktiviert werden. Nach jedem Speichern des Objekts wird er bis zur nächsten Änderung wieder deaktiviert, wie man das so üblicherweise von Anwendungen kennt. Um das zu realisieren, lasse ich bei jedem Speichervorgang ein Klon des Objekts erstellen und bei jeder Veränderung der Eigenschaften des aktuellen Objekts überprüfen, ob sich diese nun von denen des gespeicherten Zustands im Klon unterscheiden. Ich habe beispielsweise die String-Variable "titel". Wenn ich diese über ein Textfeld nach einer Speicherung ändere, unterscheiden sich meinObjekt.titel und meinGeklontesObjekt.titel und der Button wird entsprechend aktiviert. Ich habe aber auch eine Arraylist "datenformat", bestehend aus Strings (die die Werte Text, Zahl und Datum annehmen können). Wenn ich nun meinObjekt.datenformat.set(3,"Text") setze, wird der Wert gleichzeitig automatisch auch in meinGeklontesObjekt übernommen, so dass sich das aktuelle und das geklonte Objekt bezüglich der ArrayList nie unterscheiden und daher mein Ansatz nicht wie gewünscht funktioniert. Jetzt frage ich mich, warum das so ist. Zunächst dachte ich "aha, ArrayList=Referenzdatentyp!", aber für den einfachen String "titel" gilt das ja auch, warum verhält sich das Klonobjekt da anders? Mache ich etwas falsch oder eignet sich der Ansatz prinzipiell nicht für meine Fragestellung?
Hoffe, meine Anfängerdarstellung ist verständlich ?
Dank im Voraus!