2012-03-29 8 views
1

Es ist meine eigentliche Lösung einen Wert einer hashmapConvert String aus einer XML-Java-Code

private HashMap<String,Sexpr> contexte = new HashMap<String,Sexpr>(); 

... 

this.putVariable("car",Car.CAR); 
this.putVariable("cdr",Cdr.CDR); 

I unter Verwendung von SAX

<root> 
    <!-- Les types prédéfinis --> 
     <type symbole="car" type="expr" class="Car.CAR"/> 
     <type symbole="cdr" type="expr" class="Cdr.CDR"/>  
</root> 

die gleiche Sache aus einem XML tun möchte hinzufügen Ich kann diese Werte von meinem Handler (mit Sax) bekommen, indem ich attributes.getValue (i) .toString() verwende, ich möchte meine Zeichenfolge in Java-Code für den zweiten Teil meiner Anfrage konvertieren, um auf meine Klasse Auto zuzugreifen Cdr in diesem Beispiel

X.putVariable(attributes.getValue(0).toString, attributes.getValue(2).?); 

Vielen Dank für Ihre Hilfe

+0

Ich schlage vor, die Gegenstand dieser Frage zu ändern, um anzuzeigen Sie eine Zeichenfolge an ein Java-Objekt zuordnen möchten. – hcpl

Antwort

0

Es sieht aus wie Sie Reflektion verwenden wird das statische Element abzurufen (eine Field in the Java reflection APIs genannt) in der „Klasse mit dem Namen "Attribut. Zum Beispiel (ungetestet):

public static Object lookupStaticMember(String name) /* throws many */ { 
    String classField[] = name.split("\\."); 
    Class<?> klass = Class.forName(classField[0]); 
    Field field = klass.getField(classField[1]); 
    int mods = field.getModifiers(); 
    if ((Modifier.PUBLIC & mods == 0) || (Modifier.STATIC & mods == 0)) { 
    throw new IllegalArgumentException("field " + name + " is not public static"); 
    } 
    return field.get(klass); 
} 

Jetzt können Sie es verwenden, wie:

X.putVariable(attributes.getValue(0).toString(), 
    (Sexpr) lookupStaticMember(attributes.getValue(2).toString())); 
0

Also, was ich verstehe, ist, dass Sie die „Car.CAR“ String an die Car.CAR Java-Klasse Mitglied zuordnen möchten.

Wie ist das Mitglied? Wird das Mitglied wirklich benötigt? Da Sie es gerade mit dem gleichen Namen wie die Klasse haben und es scheint, eine Konstante zu sein (basierend auf der Java-Konvention für Großbuchstaben) vermute ich nicht.

Wenn Sie nur eine Klassenreferenz speichern möchten, können Sie die Methode Class.forName (String cls): Class verwenden. Dieses Klassenobjekt kann in der HashMap gespeichert werden. Beispiel:

Class cls = Class.forName("Car"); 

Auch diese ähnliche Frage prüfen, ob das ist, was Sie wollen: java String to class