2012-03-29 98 views
1

有我的實際解決方案,將值添加到一個HashMap字符串轉換爲

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

... 

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

我想通過使用SAX

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

做從XML同樣的事情我可以通過使用 attributes.getValue(i).toString()從我的處理程序(使用Sax)中獲取這些值,我想將我的字符串轉換爲Java代碼,以便訪問我的類Car或在這個例子中的Cdr

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

謝謝您的幫助

+0

我建議改變這個問題的題目,表示要映射一個字符串轉換爲Java對象:

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); } 

現在,你可以使用它。 – hcpl 2012-03-29 16:08:25

回答

0

看起來你將不得不使用反射來檢索「類名爲靜態成員(稱爲Field in the Java reflection APIs) 「屬性。例如(未經測試):

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

所以我的理解是,你要映射的「Car.CAR」字符串到Car.CAR java類成員。

會員喜歡什麼?會員真的需要嗎?既然你只是把它與類名稱相同,它似乎是一個常量(基於Java大會的資本),我懷疑不是。

如果你只是想存儲一個類的引用,那麼你可以去Class.forName(String cls):Class方法。該類對象可以存儲在HashMap中。例如:

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

還要檢查這個類似的問題,如果這是你想要的東西:java String to class