要獲取對象的所有屬性可以使用getDeclaredFields()
方法會返回一個Field
數組
遍歷這個數組幾個遍歷所有屬性
注意使用這個方法會拋出4個異常
然后根據屬性的類型選擇執行對應的內容
public static void eachProperties(Object model) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
Field[] field = model.getClass().getDeclaredFields(); //獲取實體類的所有屬性,返回Field數組
for(int j=0 ; j<field.length ; j++){ //遍歷所有屬性
String name = field[j].getName(); //獲取屬性的名字
System.out.println("attribute name:"+name);
name = name.substring(0,1).toUpperCase()+name.substring(1); //將屬性的首字符大寫,方便構造get,set方法
String type = field[j].getGenericType().toString(); //獲取屬性的類型
if(type.equals("class java.lang.String")){ //如果type是類類型,則前面包含"class ",后面跟類名
...
}
if(type.equals("class java.lang.Integer")){
...
}
if(type.equals("class java.lang.Short")){
...
}
if(type.equals("class java.lang.Double")){
...
}
if(type.equals("class java.lang.Boolean")){
...
}
if(type.equals("class java.util.Date")){
...
}
}
}
具體執行的內容就是重點了
我們知道模型的屬性都會有對應的getter和setter方法
只需要得到對應的getter和setter方法即可獲取和設置屬性
這里就需要用到getMethod
方法
獲得getter方法
方法有分帶參數和不帶參數,我們知道getter方法是不帶參數的
獲得getter方法如下
Method m = model.getClass().getMethod("get"+name);
獲得setter方法
如果是帶參數的setter方法,就應該把參數的類型做封裝成一個Class<?>泛型數組傳入getMethod
方法的第二個參數
例如參數是String類型的setter方法如下
Method m = model.getClass().getMethod("set"+name, new Class[] {String.class});
執行getter方法
String value = (String) m.invoke(model);
執行setter方法
m.invoke(model,new Object[] {new String("new value")});
from: http://zhenhappy.github.io/2015/10/26/Java/Java-Each-Properties/