2012-03-29 101 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