将String解析为代码

时间:2013-08-19 14:04:35

标签: java string parsing dynamic

我在类中有一个常量列表,如:

public class constants{
    public String avg_label ="......";
    public String count_label="......";
}

在打电话时,是否可以这样做:

public class MapDialogue{

    Constants c1 = new Constants();

    public String mappingLabels(String node){
        String text = "c1."+node+"_label";

        //Is there someway of parsing this text as code
        //like in unix shell scripting?
    }
}

2 个答案:

答案 0 :(得分:2)

是的,您可以使用Reflection。代码看起来像这样:

String value = (String)Constants.class.getDeclaredField(node).get(c1);

虽然,我对某些事情不确定:

  • 为什么你班级的常量不是真的常量? (常量应该是静态的和最终的)
  • 你为什么要实例化你的Constants课程?您应该像Constants.FIELD_NAME一样访问它们。
  • 您可能希望在第一条评论中采用assylias的建议,并尽量避免在任何时候使用反射,当然还有其他方法可以做到成本更低。

我想在你的情况下,你很可能更善于使用某种Map

答案 1 :(得分:0)

是的,有办法实现这一目标。您可以通过Field API中的Reflection包来完成此操作。可以找到这方面的Java教程here

基本理念是:

Field yourField = c1.getClass().getDeclaredField(yourString);

作为旁注,Constants文件的成员通常为public static final。使用这些修饰符,您不需要创建Constants的实例,并且值也将是不可修改的。

相关问题