我的实际解决方案是向hashmap添加值
private HashMap<String,Sexpr> contexte = new HashMap<String,Sexpr>();
...
this.putVariable("car",Car.CAR);
this.putVariable("cdr",Cdr.CDR);
我想通过使用SAX
从XML做同样的事情<root>
<!-- Les types prédéfinis -->
<type symbole="car" type="expr" class="Car.CAR"/>
<type symbole="cdr" type="expr" class="Cdr.CDR"/>
</root>
我可以使用我的处理程序(使用Sax)获取这些值 attributes.getValue(i).toString(),我想在我的请求的第二部分将我的字符串转换为Java代码,以便在此示例中访问我的类Car或Cdr
X.putVariable(attributes.getValue(0).toString, attributes.getValue(2).? );
感谢您的帮助
答案 0 :(得分:0)
所以我理解你想要将“Car.CAR”字符串映射到Car.CAR java类成员。
会员喜欢什么?会员真的需要吗?因为你只是拥有与类相同的名称,它似乎是一个常量(基于大写的java惯例)我怀疑不是。
如果您只想存储类引用,那么您可以使用Class.forName(String cls):Class方法。该类对象可以存储在HashMap中。例如:
Class cls = Class.forName("Car");
如果这是您想要的,请检查此类似问题:java String to class
答案 1 :(得分:0)
看起来你必须使用反射来检索在“class”属性中命名的静态成员(称为Field
in the Java reflection APIs)。例如(未经测试):
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);
}
现在您可以将其用作:
X.putVariable(attributes.getValue(0).toString(),
(Sexpr) lookupStaticMember(attributes.getValue(2).toString()));