Liebe Java-und-XML-Experten,
ich schreibe wegen eines Problems, an dem ich mir jetzt schon seit ein paar Wochen die Fingernägel kurz tippe, bei dem ich aber einfach nicht weiter komme. Möglicherweise kann mir ja jemand einen Tipp oder Fingerzeig geben, in welche Richtung ich suchen muss.
Mein Programm soll eine Reihe von Objekten (der Klasse "Beitrag.java") instantiieren, die alle mehrere Instanzvariablen enthalten sowie eine Funktion, die auf der Basis bestimmter Bedinungen diese Instanzvariablen manipuliert. Eine (SAX-)Parserklasse geht zu Beginn ein XML-Dokument durch und instantiiert die jeweiligen "Beitrag"-Objekte mit den dort vorgefundenen Werten. Da, wie gesagt, eine Methode der Klasse "Beitrag.java" auf der Basis von Bedingungen operiert, werden die aus dem XML-Dokument eingelesenen Werte in den "Beitrag"-Objekten in mehreren HashMaps gespeichert, die von den Funktionen dann abgearbeitet werden. - So weit, so gut.
Das Problem ist nun aber Folgendes: Da sich die Bedingungen, auf denen die Methode der "Beitrag"-Objekte fußt, zum Teil auf dem Zustand von Objektvariablen *anderer Klassen* bezieht, die vor und unabhängig von den "Beitrag"-Objekten bestehen, stehen in der XML-Datei eben Referenzen auf diese anderen Objekte und ihre Instanzvariablen, zum Beispiel "andereKlasse.einIntegerWert". Wenn ich diese mit dem Parser aber auslese und in die HashMap eines "Beitrag"-Objekts schreibe, versteht er den Ausdruck von gerade nicht als Referenz auf eine Objektvariable, sondern als *String*. Und wenn die Methode eines "Beitrag"-Objekts dann an dieser Stelle in der HashMap vorbeikommt, enthält diese nicht etwa den *Wert* der *Variable* andereKlasse.einIntegerWert, sondern vielmehr den Ausdruck *andereKlasse.einIntegerWert* SELBST - also etwas ganz Anderes, eben weil er das, was er aus dem XML-Dokument ausliest, als String versteht. Das tut er selbst dann, wenn ich den String, bevor ich ihn in die HashMap schreibe, ausdrücklich nach (Object) caste. (Wenn ich den selben Ausdruck "andereKlasse.einIntegerWert" dagegen direkt in die HashMap schreibe, ist das gar kein Problem, das wird als Referenz auf die Objektvariable interpretiert.)
Meine Frage ist also konkret folgende: Wie schaffe ich es im Rahmen des beschriebenen Szenarios, dass ein aus einem XML-Dokument ausgelesener Wert als *Variablenname* und insofern als *Referenz* auf einen *anderen* Wert verstanden wird, und nicht einfach als String? Ich hoffe, die Frage ist halbwegs verständlich, ich habe es trotz ausführlicher Suche bisher noch nicht einmal zu einem Stichwort geschafft, unter dem ich bezüglich dieses Problems sinnvoll suchen könnte. Ich bin daher für jede Hilfe dankbar - und bis hierhin auf jeden Fall schon mal für die Aufmerksamkeit.
Mit freundlichen Grüßen aus Stuttgart,
Martin
ich schreibe wegen eines Problems, an dem ich mir jetzt schon seit ein paar Wochen die Fingernägel kurz tippe, bei dem ich aber einfach nicht weiter komme. Möglicherweise kann mir ja jemand einen Tipp oder Fingerzeig geben, in welche Richtung ich suchen muss.
Mein Programm soll eine Reihe von Objekten (der Klasse "Beitrag.java") instantiieren, die alle mehrere Instanzvariablen enthalten sowie eine Funktion, die auf der Basis bestimmter Bedinungen diese Instanzvariablen manipuliert. Eine (SAX-)Parserklasse geht zu Beginn ein XML-Dokument durch und instantiiert die jeweiligen "Beitrag"-Objekte mit den dort vorgefundenen Werten. Da, wie gesagt, eine Methode der Klasse "Beitrag.java" auf der Basis von Bedingungen operiert, werden die aus dem XML-Dokument eingelesenen Werte in den "Beitrag"-Objekten in mehreren HashMaps gespeichert, die von den Funktionen dann abgearbeitet werden. - So weit, so gut.
Das Problem ist nun aber Folgendes: Da sich die Bedingungen, auf denen die Methode der "Beitrag"-Objekte fußt, zum Teil auf dem Zustand von Objektvariablen *anderer Klassen* bezieht, die vor und unabhängig von den "Beitrag"-Objekten bestehen, stehen in der XML-Datei eben Referenzen auf diese anderen Objekte und ihre Instanzvariablen, zum Beispiel "andereKlasse.einIntegerWert". Wenn ich diese mit dem Parser aber auslese und in die HashMap eines "Beitrag"-Objekts schreibe, versteht er den Ausdruck von gerade nicht als Referenz auf eine Objektvariable, sondern als *String*. Und wenn die Methode eines "Beitrag"-Objekts dann an dieser Stelle in der HashMap vorbeikommt, enthält diese nicht etwa den *Wert* der *Variable* andereKlasse.einIntegerWert, sondern vielmehr den Ausdruck *andereKlasse.einIntegerWert* SELBST - also etwas ganz Anderes, eben weil er das, was er aus dem XML-Dokument ausliest, als String versteht. Das tut er selbst dann, wenn ich den String, bevor ich ihn in die HashMap schreibe, ausdrücklich nach (Object) caste. (Wenn ich den selben Ausdruck "andereKlasse.einIntegerWert" dagegen direkt in die HashMap schreibe, ist das gar kein Problem, das wird als Referenz auf die Objektvariable interpretiert.)
Meine Frage ist also konkret folgende: Wie schaffe ich es im Rahmen des beschriebenen Szenarios, dass ein aus einem XML-Dokument ausgelesener Wert als *Variablenname* und insofern als *Referenz* auf einen *anderen* Wert verstanden wird, und nicht einfach als String? Ich hoffe, die Frage ist halbwegs verständlich, ich habe es trotz ausführlicher Suche bisher noch nicht einmal zu einem Stichwort geschafft, unter dem ich bezüglich dieses Problems sinnvoll suchen könnte. Ich bin daher für jede Hilfe dankbar - und bis hierhin auf jeden Fall schon mal für die Aufmerksamkeit.
Mit freundlichen Grüßen aus Stuttgart,
Martin