2015-05-30 101 views
2

以下是我的POJO類,它有50個帶setter和getters的字段。如何從pojo動態獲取字段

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條記錄,有沒有辦法做到這一點動態(通過任何環)。

感謝

+3

只是好奇 - 爲什麼地球上你會有一個1000字段,而不是一個列表? – dnault

+1

您可以使用java反射 – Razib

+0

我認爲反射遠遠超出了這個例子的範圍。 –

回答

4

您可以使用Java反射。爲簡單起見,我假定您的Employee calss僅包含int字段。但是您可以使用此處使用的類似規則獲取float,doublelong的值。這裏是一個完整的代碼 -

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); 
} 

} 
+0

我認爲他不知道如何使用數組,反射現在肯定是我們希望他學習數組或列表的地方。 –

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]; 
} 
+0

我只有字段,因爲我使用的是spring批處理。 – User111

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] 
+0

雖然你,但我從數據庫中檢索我的數據並存儲在pojo中,所以我只需要使用pojo類 – User111

+0

因此,你有一張1000列的表格? – Ouney

3

我不可能想象一個真實的生活在一個班級中有1000個字段的場景。話雖如此,你可以反思地調用你所有的獲得者。使用Introspector來完成這項任務:

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

    return sum; 
}