Java遍歷對象所有屬性


要獲取對象的所有屬性可以使用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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM