利用反射机制获取成员变量的变量名
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, 13);
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