天天看點

Field擷取java類中的成員變量名

利用反射機制擷取成員變量的變量名

PartnerDto partnerDto;
 Map<String,Object> partnerCustomerMap = partnerDto.getCustomData();

        Field[] fields = partnerDto.getClass().getDeclaredFields();
        if(fields != null){
            for (Field field:fields){
                field.setAccessible(true);
                if(!(field.get(partnerDto) instanceof Map)){
                    partnerCustomerMap.put(field.getName(),field.get(partnerDto));
                    System.out.println(field.getType().getName());
                }
            }
        }
           

類Field

提供有關類或接口的單個字段的資訊,以及對它的動态通路權限。

獲得類的成員變量數組:

  1. getFields(公共類的)
//擷取類的位元組碼檔案對象    
        Class c = Class.forName("zl_Relfect_01.Person");

        //獲得該對象的公共成員變量
        Field[] f = c.getFields();
        //周遊
        for(Field fie : f){
            System.out.println(fie);
        }
 
           
  1. getDeclaredFields(所有類型的)
//擷取類的位元組碼檔案對象    
        Class c = Class.forName("zl_Relfect_01.Person");
      //擷取該類的所有成員變量
        Field[] f = c.getDeclaredFields();
        for(Field fie : f){
            System.out.println(fie);
        }
           

獲得類的單個成員變量:

  1. getField (公共類的)
//擷取類的位元組碼檔案對象    
         Class c = Class.forName("zl_Relfect_01.Person");
         //擷取單個公共的成員變量
          Field f = c.getField("address");
         System.out.println(f);
           
  1. getDeclaredField (所有類型的)
//擷取類的位元組碼檔案對象    
        Class c = Class.forName("zl_Relfect_01.Person");
 //        擷取單個成員變量(所有類型)
         Field f = c.getDeclaredField("name");
         System.out.println(f);
           

通過反射擷取成員變量并使用

//擷取類的位元組碼檔案對象
        Class c = Class.forName("zl_Relfect_01.Person");    
        //通過無參構造建立對象
        Constructor con = c.getConstructor();
        Object obj = con.newInstance();


        //擷取私有成員變量name,并對它進行指派
        //首先擷取私有成員變量name
        Field newname = c.getDeclaredField("name");
        //**成員變量name是私有的,是以得先取消語言通路檢查**  
        // public void setAccessible(boolean flag)
        newname.setAccessible(true);
        //set(Object obj,Object value):将指定對象變量上此 Field 對象表示的字段設定為指定的新值。
        //給obj裡面的newname指派為張三
        newname.set(obj, "張三");
        System.out.println(obj);//Person [name=張三, age=0, address=null]


        //擷取預設類型成員變量age,并對它進行指派    
        //擷取age變量,并指派
        Field newage = c.getDeclaredField("age");
        //取消語言通路檢查
        newage.setAccessible(true);
        //給age指派
        newage.set(obj, );
        System.out.println(obj);


        //擷取公共成員變量address,并對它指派    
        //擷取address對象,并指派
        Field newaddress = c.getDeclaredField("address");
        newaddress.set(obj, "家鄉");
        System.out.println(obj);
           

參考:

http://www.cnblogs.com/LZL-student/p/5966203.html

https://www.zhihu.com/question/27439001