繁体   English   中英

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

[英]Java String value as part of statement?

我有一个声明要保存信息的类。 让我们说它有这些领域

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中这样做? 如果没有,是否有任何语言支持这种事情(只是出于好奇)?

反思可能就是你所需要的。 但是你需要更多的是仔细研究你的设计 你应尽可能避免反思

如果您仍然对此感兴趣,请查看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);

您可以为您的班级添加合适的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();

反思是要走的路。 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();
    }
 }

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

你真的没有说出你真正的问题是什么; 所以很难说是否需要使用反射或其他东西。 但是,当有人谈论将字符串值与另一个变量相关联时,他们经常需要使用的是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));
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM