以下是我的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次记录,而不是手动执行此操作。
由于
答案 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
字段。但您可以使用此处使用的类似规则来获取float
,double
或long
值。这是一个完整的代码 -
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];
}