F
Florian Scheidler
Gast
Hallo zusammen,
in meiner Java-Anwendung werden Sendungen erfasst (Spedition), die von einem Versender an einen Empfänger gehen. Alle Sendungsdaten die in der Erfassungsmaske vom User eingetragen worden sind, müssen bevor sie in der Datenbank gespeichert werden, in der Anwendung zwischengespeichert werden. Das passiert in einer Hashtable.
- Sendungsstammdaten wie Datum, Erfasser, Versender, Empfänger: Hashtable "vecSendung"
Diese Hashtable wird als Parameter an den Konstruktor der Klasse "Ausfuehrung" übergeben und dort an zwei Klassenvariablen übergeben. Diese beiden Klassenvariablen sollen unabhängig voneinander die Sendungsdaten unterschiedlich formatieren.
Da Java hier scheinbar standardmäßig mit Call-By-Reference arbeitet, werden Formatierungen der Daten in vecSendung auch in vecSendung2 vorgenommen. vecSendung2 soll aber den Originalzustand beibehalten.
Wie kann ich das Problem umgehen? Wie mache ich aus vecSendung und vecSendung2 zwei völlig eigenständige Objekte, die die Daten vom Parameter sdg erhalten?
Gruß Florian Scheidler
in meiner Java-Anwendung werden Sendungen erfasst (Spedition), die von einem Versender an einen Empfänger gehen. Alle Sendungsdaten die in der Erfassungsmaske vom User eingetragen worden sind, müssen bevor sie in der Datenbank gespeichert werden, in der Anwendung zwischengespeichert werden. Das passiert in einer Hashtable.
- Sendungsstammdaten wie Datum, Erfasser, Versender, Empfänger: Hashtable "vecSendung"
Diese Hashtable wird als Parameter an den Konstruktor der Klasse "Ausfuehrung" übergeben und dort an zwei Klassenvariablen übergeben. Diese beiden Klassenvariablen sollen unabhängig voneinander die Sendungsdaten unterschiedlich formatieren.
Code:
public class Ausfuehrung extends JDialog
{
private Hashtable vecSendung, vecSendungDB;
private Hashtable vecExtras, vecExtrasDB;
private Vector vecPositionen, vecPositionenDB;
private Vector vecADR, vecADR_DB;
private Hashtable vecAktivierung, vecAktivierungDB;
private Frame root;
public StatusAnzeige(Frame parent, Connection conn, Hashtable sdg)
{
super(parent, "Status der Sendungserfassung", true);
root = parent;
//CALL BY REFERENCE-PROBLEM:
// vecSendung UND vecSendung2 verweisen beide auf sdg, statt jeweils ein eigenständiges Objekt darzustellen.
// D.h. wenn sich vecSendung ändert, ist auch vecSendung2 verändert.
// Diesen Umstand gilt es zu verhindern !
vecSendung = sdg;
vecSendung2 = sdg;
//Formatierungen der Daten in vecSendung
//Formatierungen der Daten in vecSendung2
Da Java hier scheinbar standardmäßig mit Call-By-Reference arbeitet, werden Formatierungen der Daten in vecSendung auch in vecSendung2 vorgenommen. vecSendung2 soll aber den Originalzustand beibehalten.
Wie kann ich das Problem umgehen? Wie mache ich aus vecSendung und vecSendung2 zwei völlig eigenständige Objekte, die die Daten vom Parameter sdg erhalten?
Gruß Florian Scheidler