通過java反射機制獲取該類的所有屬性類型、值


轉自:http://blog.csdn.net/sd4000784/article/details/7448221

方法使用了這倆個包下的 field 和method

import Java.lang.reflect.Field;

import java.lang.reflect.Method;

  1 public static void getObjectValue(Object object) throws Exception {  
  2         //我們項目的所有實體類都繼承BaseDomain (所有實體基類:該類只是串行化一下)  
  3         //不需要的自己去掉即可  
  4         if (object != null && object instanceof BaseDomain) {//if (object!=null )  ----begin  
  5             // 拿到該類  
  6             Class<?> clz = object.getClass();  
  7             // 獲取實體類的所有屬性,返回Field數組  
  8             Field[] fields = clz.getDeclaredFields();  
  9   
 10             for (Field field : fields) {// --for() begin  
 11                 System.out.println(field.getGenericType());//打印該類的所有屬性類型  
 12   
 13                 // 如果類型是String  
 14                 if (field.getGenericType().toString().equals(  
 15                         "class java.lang.String")) { // 如果type是類類型,則前面包含"class ",后面跟類名  
 16                     // 拿到該屬性的gettet方法  
 17                     /** 
 18                      * 這里需要說明一下:他是根據拼湊的字符來找你寫的getter方法的 
 19                      * 在Boolean值的時候是isXXX(默認使用ide生成getter的都是isXXX) 
 20                      * 如果出現NoSuchMethod異常 就說明它找不到那個gettet方法 需要做個規范 
 21                      */  
 22                     Method m = (Method) object.getClass().getMethod(  
 23                             "get" + getMethodName(field.getName()));  
 24   
 25                     String val = (String) m.invoke(object);// 調用getter方法獲取屬性值  
 26                     if (val != null) {  
 27                         System.out.println("String type:" + val);  
 28                     }  
 29   
 30                 }  
 31   
 32                 // 如果類型是Integer  
 33                 if (field.getGenericType().toString().equals(  
 34                         "class java.lang.Integer")) {  
 35                     Method m = (Method) object.getClass().getMethod(  
 36                             "get" + getMethodName(field.getName()));  
 37                     Integer val = (Integer) m.invoke(object);  
 38                     if (val != null) {  
 39                         System.out.println("Integer type:" + val);  
 40                     }  
 41   
 42                 }  
 43   
 44                 // 如果類型是Double  
 45                 if (field.getGenericType().toString().equals(  
 46                         "class java.lang.Double")) {  
 47                     Method m = (Method) object.getClass().getMethod(  
 48                             "get" + getMethodName(field.getName()));  
 49                     Double val = (Double) m.invoke(object);  
 50                     if (val != null) {  
 51                         System.out.println("Double type:" + val);  
 52                     }  
 53   
 54                 }  
 55   
 56                 // 如果類型是Boolean 是封裝類  
 57                 if (field.getGenericType().toString().equals(  
 58                         "class java.lang.Boolean")) {  
 59                     Method m = (Method) object.getClass().getMethod(  
 60                             field.getName());  
 61                     Boolean val = (Boolean) m.invoke(object);  
 62                     if (val != null) {  
 63                         System.out.println("Boolean type:" + val);  
 64                     }  
 65   
 66                 }  
 67   
 68                 // 如果類型是boolean 基本數據類型不一樣 這里有點說名如果定義名是 isXXX的 那就全都是isXXX的  
 69                 // 反射找不到getter的具體名  
 70                 if (field.getGenericType().toString().equals("boolean")) {  
 71                     Method m = (Method) object.getClass().getMethod(  
 72                             field.getName());  
 73                     Boolean val = (Boolean) m.invoke(object);  
 74                     if (val != null) {  
 75                         System.out.println("boolean type:" + val);  
 76                     }  
 77   
 78                 }  
 79                 // 如果類型是Date  
 80                 if (field.getGenericType().toString().equals(  
 81                         "class java.util.Date")) {  
 82                     Method m = (Method) object.getClass().getMethod(  
 83                             "get" + getMethodName(field.getName()));  
 84                     Date val = (Date) m.invoke(object);  
 85                     if (val != null) {  
 86                         System.out.println("Date type:" + val);  
 87                     }  
 88   
 89                 }  
 90                 // 如果類型是Short  
 91                 if (field.getGenericType().toString().equals(  
 92                         "class java.lang.Short")) {  
 93                     Method m = (Method) object.getClass().getMethod(  
 94                             "get" + getMethodName(field.getName()));  
 95                     Short val = (Short) m.invoke(object);  
 96                     if (val != null) {  
 97                         System.out.println("Short type:" + val);  
 98                     }  
 99   
100                 }  
101                 // 如果還需要其他的類型請自己做擴展  
102   
103             }//for() --end  
104               
105         }//if (object!=null )  ----end  
106     }  
107   
108     // 把一個字符串的第一個字母大寫、效率是最高的、  
109     private static String getMethodName(String fildeName) throws Exception{  
110         byte[] items = fildeName.getBytes();  
111         items[0] = (byte) ((char) items[0] - 'a' + 'A');  
112         return new String(items);  
113     }  

 


免責聲明!

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



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