1

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

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?
    }
}
4

2 回答 2

2

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

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

虽然,我有点不确定几件事:

  • 为什么你的类中的常量不是真正的常量?(常量应该是静态的和最终的)
  • 你为什么还要实例化你的Constants类?您应该像Constants.FIELD_NAME.
  • 您可能想在第一条评论中采纳 assylias 的建议,并尽量避免始终使用反射,当然还有其他成本更低的方法可以做到这一点。

我想在你的情况下,你很可能会更好地使用某种Map

于 2013-08-19T14:15:58.790 回答
0

是的,有一种方法可以实现这一目标。您可以通过Field API中的 Reflection 包来实现。Java 教程可以在这里找到

基本思想是:

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

附带说明一下,Constants文件的成员通常为public static final. 使用这些修饰符,您不需要创建 的实例Constants,并且这些值也将是不可修改的。

于 2013-08-19T14:15:46.853 回答