Java String值作为语句的一部分?

时间:2013-01-18 02:24:42

标签: java string

我有一个声明要保存信息的类。假设它有这些字段

class data {
   int a;
   int b;
   int c;
}

我想要像这样访问这些字段:

String [] fields = {"a", "b", "c"};
data da = new data();
for (int i = 0; i < 3; i++) 
   if (da.fields[i] < 10)
      dosomething();

Java中有没有办法做到这一点?谷歌搜索,我得到了一些关于“反射”的结果,但我从来没有真正听说过,我认为这不是我想要的。有没有办法在Java中这样做?如果没有,是否有任何语言支持这种事情(只是出于好奇)?

4 个答案:

答案 0 :(得分:5)

反思可能就是你所需要的。但是你需要更多的是认真考虑你的设计。您应该尽可能避免反思

如果您仍然有兴趣这样做,请查看Java Reflection: Fields

Field field = aClass.getField("someField");

你要做的就是用这个名字来获得这个领域。你想要的更详细的例子。

Class  aClass = MyObject.class
Field field = aClass.getField("someField");

MyObject objectInstance = new MyObject();

Object value = field.get(objectInstance);

field.set(objetInstance, value);

答案 1 :(得分:4)

您可以为您的班级添加合适的API:

class data {
   int a;
   int b;
   int c;

   int get(String field) {
       if (field.equals("a")) return a;
       if (field.equals("b")) return b;
       if (field.equals("c")) return c;
       throw new IllegalArgumentException();
   }
}

然后你可以:

String [] fields = {"a", "b", "c"};
data da = new data();
for (int i = 0; i < 3; i++) 
   if (da.get(fields[i]) < 10)
      dosomething();

答案 2 :(得分:0)

反思是要走的路。 Karthik T有正确的答案。 不使用反射:

将字段声明为数组(或Map),将名称声明为查找:

class data {
    int[] fields = new int[3];
    public static final int A = 0;
    public static final int B = 1;
    public static final int C = 2;
 }

 public void foo() {
     data da = new data();
    int[] fields = {data.A, data.B, data.C};
    for (int n : fields) {
       if (da.fields[n] < 10) doSomething();
    }
 }

它的丑陋,如果你想做这样的事情,你的设计可能是错的,但它有效。

答案 3 :(得分:0)

你并没有真正说出你的真正问题是什么;所以很难说是否需要使用反射或其他东西。但是,当有人谈论将字符串值与另一个变量相关联时,他们经常需要使用的是Map(或其他语言的字典);沿着这条线的东西:

    TreeMap<String, Integer> tm = new TreeMap<String, Integer>();       
    tm.put("a", 1);
    tm.put("b", 2);
    tm.put("c", 3);

    for (String k: tm.keySet()) {
        System.out.println(k + ": " + tm.get(k));
    }