Attribut-Zuweisung, wenn Typ unbekannt

moepasd

Grünschnabel
Hi,

vorab kurz der relevante Code:
Code:
	public void setAttribute(String tempHead, String tempData) {
		Field[] allAttributes = getClass().getDeclaredFields();
		for (int i = 0; i < allAttributes.length; i++) {
			Field element = (Field) allAttributes[i];
			if (element.getName().startsWith("db_")) {
				if (tempHead.equals(element.getName().substring(3))){
					try {
						element.set(this, tempData);
						}
					catch (IllegalArgumentException e) { e.printStackTrace(); }
					catch (IllegalAccessException e) { e.printStackTrace(); }

				}
			}
		}
	}

so, jetzt die Erklärung dazu ;)

Die Methode bekommt zwei Strings übergeben. Der erste benötige ich, um zu identifizieren in welches Attribut der Wert geschrieben werden muss. Dafür lese ich alle Felder der Klasse ein und vergleiche diese mit dem String (bis dahin funktioniert das ganze auch prima)

Jetzt möchte ich den zweiten String dem entsprechenden Attribut als Wert zuordnen...nur genau da komme ich nicht ganz weiter.

ich habs mal mit element.set(...) probiert, aber auch alternativen wie
Code:
if (element.getType().newInstance() instanceof Integer) {...}
Das ganze passiert in einer abstrakten Klasse, das heißt an der Stelle weiß ich nicht in welcher der erweiternden Klassen ich mich befinde.

Im Grunde muss an der Stelle nur festgestellt werden von welchem Typ das Attribut ist und ein entsprechender Cast des Strings in diesen Typ vorgenommen werden.

Nur genau das bekomme ich nicht hin ;)

Kurzfassung: element ist ein Attribut mit einem bestimmten Typ. Wie bekomme ich meinen String tempData als Wert dem element zugeordnet?

Gruß und Danke

moepasd
 
Bekommst du denn eine IllegalArgumentException oder sowas weil du versuchst auf dem Feld einen String Wert zu setzen obwohl ein int erwartet wird, o.ä.?
 
Ich würde dir empfehlen tempData anstatt String als Object zu behandeln.
Java:
public void setAttribute(String tempHead, Object tempData) { ... }


Zitat aus der Doku der Klasse Field:

If the underlying field is of a primitive type, an unwrapping conversion is attempted to convert the new value to a value of a primitive type. If this attempt fails, the method throws an IllegalArgumentException.

Sprich: Du kannst
Java:
setAttribute( "bla", new Integer( 10 ) );
verwenden, aber auch z.B.
Java:
setAttribute( "bla", "myString" );

//edit: Wobei, wenn ich das Zitat richtig verstehe müsste es theoretisch auch z.B. "2" automatisch konvertiert werden..

Gruß
Tobias
 
Zuletzt bearbeitet:
Zurück