我有一个名为 Bean 的类,它有 3 个字段
public class Bean {
private Object field0;
private Object field1;
private Object field2;
public Object getField0() {
return field0;
}
public void setField0(Object field0) {
this.field0 = field0;
}
public Object getField1() {
return field1;
}
public void setField1(Object field1) {
this.field1 = field1;
}
public Object getField2() {
return field2;
}
public void setField2(Object field2) {
this.field2 = field2;
}
我想为每个字段设置数据
int j, i;
for (j = 0; j < body.size(); j++) {
line = new Bean();
List row = body.get(j);
HashMap map = new HashMap(headers.length);
for (i = 0; i < headers.length; i++) {
line.choosefield2(i, headers, row);
}
list.add(line);
}
并且 choosefield2 在 bean 中:
public void choosefield2(int i, String[] headers, List row) {
switch (i) {
case 0:
this.setField0(row.get(0));
break;
case 1:
this.setField1(row.get(1));
break;
case 2:
this.setField2(row.get(2));
break;
我可以在 for 循环中执行此操作而不是进行大小写切换吗?我有超过 3 个字段,所以它不是很实用。我听说反射(reflection)可能是一种选择。我想要类似的东西
for (i = 0; i < headers.length; i++) {
line.setField[i]=row.get(i);
}
list.add(line);
}
这可能吗?使用 JDK 1.6
最佳答案
你可以,问题是,如果你应该的话。当然,您可以动态搜索方法并通过反射调用它们。
Class<?> clz = Bean.class;
Method[] methods = clz.getDeclaredMethods();
// etc.
methods[i].invoke( ... );
但这通常不会帮助您提高代码的可读性——而且会减慢您的应用程序。此外,您当然会失去很多类型安全和编译器检查,可能会用运行时发生的异常替换许多编译器错误。只有在没有其他选择的情况下,您才应该这样做。
关于java - 使用循环设置 Bean 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31725140/