java - 使用循环设置 Bean 的属性

标签 java performance for-loop reflection javabeans

我有一个名为 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/

相关文章:

java - Maven 无法解决本地依赖

python - MATLAB 中的 Python zip 函数等效于什么?

java - 我怎样才能简化这个奇数代码?

java - For 循环嵌套在 do... while 不起作用

java - Google Drive 索引大文件的限制是什么?

java - Android opencv加载16位深度的灰度png

java - 摆脱警告?

Java 应用程序性能根据其执行方式而变化

performance - Licode Erizo.Stream 视频帧质量

python - Beautifulsoup4 性能树莓派3