[英]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.