你想在這裏做的事情:
double out = list.get(0).type // type should be a placeholder for one of
也不是沒有可能使用反射,這樣的:
public double example(ArrayList<CMyType> list, String type) {
CMyClass obj = list.get(0);
Field field = obj.getClass().getDeclaredField(type);
Object objOut = field.get(obj);
// you could check for null just in case here
double out = (Double) objOut;
return out;
}
你也可以考慮修改你的CMyType
類看起來像這樣:
class CMyType {
private double var1;
private double var2;
public double get(String type) {
if (type.equals("var1")) {
return var1;
}
if (type.equals("var2")) {
return var2;
}
throw new IllegalArgumentException();
}
,然後從你的代碼是這樣稱呼它:
public double example(ArrayList<CMyType> list, String type) {
CMyClass myobj = list.get(0);
return myobj.get(type);
}
更好的解決辦法是使用Map<String, Double>
在CMyType
這樣的:
class CMyType {
private Map<String, Double> vars = new HashMap();
public CMyType() {
vars.put("var1", 0.0);
vars.put("var2", 0.0);
}
public double get(String type) {
Double res = vars.get(type);
if (res == null) throw new IllegalArgumentException();
return res;
}
太棒了!謝謝。這工作! – Christian