G
Guvnor
Gast
Hallo!
Ich versuche gerade, ein Objekt komplett zu klonen. Da dies aber mit mehreren unterschiedlichen Objekten passieren muß, dachte ich, es wäre wohl am sinnvollsten, per Reflection sich alle Felder zu holen und diese dann entsprechend zu setzen.
Nur habe ich das Gefühl, die Field.get()-Methode tut nicht das, was sie tun sollte.
Laut Javadoc gibt sie mir den Wert des Feldes zurück, ich bekomme aber immer nur den Namen. Ein kleines Codebeispiel:
Okay, nun werden also alle Felder des Objekts currentRow in einem Array gespeichert. Das geh ich durch und gib mir den Wert und danach den Typ aus. Eigentlich könnte man - laut Dokumentation - nun solch eine Ausgabe erwarten:
--------------- 17
--------------- class java.lang.Integer
--------------- 23.5
--------------- class java.lang.Float
--------------- hallo wie gehts
--------------- class java.lang.String
Tatsächlich gibt er aber nicht den Wert aus, sondern den Namen des Feldes. Und folglich in der jeweils zweiten Zeile, wo die Klasse des gewünschten Wertes angezeigt werden soll, immer java.lang.String. Aber das sollte doch eigentlich gar nicht der Fall sein?
Ist nun die Doku im Eimer oder verstehe ich was falsch?
Ich versuche gerade, ein Objekt komplett zu klonen. Da dies aber mit mehreren unterschiedlichen Objekten passieren muß, dachte ich, es wäre wohl am sinnvollsten, per Reflection sich alle Felder zu holen und diese dann entsprechend zu setzen.
Nur habe ich das Gefühl, die Field.get()-Methode tut nicht das, was sie tun sollte.
Laut Javadoc gibt sie mir den Wert des Feldes zurück, ich bekomme aber immer nur den Namen. Ein kleines Codebeispiel:
Code:
Field[] fields = ((Auftraege)currentRow).getClass().getFields();
for(int i=0; i<fields.length; i++)
{
try
{
System.out.println("--------------- " + fields[i].get(currentRow));
System.out.println("--------------- " + fields[i].get(currentRow).getClass());
System.out.println("");
}
// catch...
}
Okay, nun werden also alle Felder des Objekts currentRow in einem Array gespeichert. Das geh ich durch und gib mir den Wert und danach den Typ aus. Eigentlich könnte man - laut Dokumentation - nun solch eine Ausgabe erwarten:
--------------- 17
--------------- class java.lang.Integer
--------------- 23.5
--------------- class java.lang.Float
--------------- hallo wie gehts
--------------- class java.lang.String
Tatsächlich gibt er aber nicht den Wert aus, sondern den Namen des Feldes. Und folglich in der jeweils zweiten Zeile, wo die Klasse des gewünschten Wertes angezeigt werden soll, immer java.lang.String. Aber das sollte doch eigentlich gar nicht der Fall sein?
Ist nun die Doku im Eimer oder verstehe ich was falsch?