利用反射機制擷取成員變量的變量名
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
提供有關類或接口的單個字段的資訊,以及對它的動态通路權限。
獲得類的成員變量數組:
- getFields(公共類的)
//擷取類的位元組碼檔案對象
Class c = Class.forName("zl_Relfect_01.Person");
//獲得該對象的公共成員變量
Field[] f = c.getFields();
//周遊
for(Field fie : f){
System.out.println(fie);
}
- getDeclaredFields(所有類型的)
//擷取類的位元組碼檔案對象
Class c = Class.forName("zl_Relfect_01.Person");
//擷取該類的所有成員變量
Field[] f = c.getDeclaredFields();
for(Field fie : f){
System.out.println(fie);
}
獲得類的單個成員變量:
- getField (公共類的)
//擷取類的位元組碼檔案對象
Class c = Class.forName("zl_Relfect_01.Person");
//擷取單個公共的成員變量
Field f = c.getField("address");
System.out.println(f);
- 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