如何动态地从pojo中获取字段

时间:2015-05-30 05:03:07

标签: java variables field pojo

以下是我的POJO课程,其中包含50个带有设置者和获取者的字段。

Class Employee{
int m1;
int m2;
int m3;
.
.
int m50;
//setters and getters

从我的另一个课程中,我需要获得所有这50个字段以获得他们的总和

Employee e1 =new Emploee();
int total = e1.getM1()+e2.getM2()+........e2.getM50();

有没有任何方法可以动态地(通过任何循环)执行50次记录,而不是手动执行此操作。

由于

4 个答案:

答案 0 :(得分:4)

我无法想象一个真实的场景,你在一个类中有1000个字段。话虽如此,你可以反思地调用你所有的吸气剂。使用 Introspector 完成此任务:

int getEmployeeSum(Employee employee)
{    
    int sum = 0;
    for(PropertyDescriptor propertyDescriptor : Introspector.getBeanInfo(Employee.class).getPropertyDescriptors())
    {
        sum += propertyDescriptor.getReadMethod().invoke(employee);
    }

    return sum;
}

答案 1 :(得分:4)

您可以使用java反射。为简单起见,我假设您的Employee calss仅包含int字段。但您可以使用此处使用的类似规则来获取floatdoublelong值。这是一个完整的代码 -

import java.lang.reflect.Field;
import java.util.List;

class Employee{

    private int m=10;
    private int n=20;
    private int o=25;
    private int p=30;
    private int q=40;
}

public class EmployeeTest{

 public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException{

        int sum = 0;
        Employee employee = new Employee();
        Field[] allFields = employee.getClass().getDeclaredFields();

        for (Field each : allFields) {

            if(each.getType().toString().equals("int")){

                Field field = employee.getClass().getDeclaredField(each.getName());
                field.setAccessible(true);

                Object value = field.get(employee);
                Integer i = (Integer) value;
                sum = sum+i;
            }

        }

        System.out.println("Sum :" +sum);
 }

}

答案 2 :(得分:2)

是的,不要使用1000个字段!使用包含1000个元素的数组,然后使用array[i-1]填充mi,您的类将类似于:

Class Employee{
    int[] empArr = new int[1000];
}

然后使用可以找到这样的总和:

int sum = 0;

for(int i = 0; i<1000 ; i++)
    sum+= e1.empArr[i]

答案 3 :(得分:1)

是的,而不是为每个m1,m2,m3,...设置一个单独的变量,你可以将它们放在一个数组中,如下所示:

Class Employee {
    public int[] m = new int[1000];
}

Employee e1 = new Employee();
int total = 0;

for(int i = 0; i < e1.m.length; i++) {
    total += e1.m[i];
}