利用反射机制获取成员变量的变量名
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();
Field newname = c.getDeclaredField(
"name");
newname.setAccessible(
true);
newname.
set(obj,
"张三");
System.
out.println(obj);
Field newage = c.getDeclaredField(
"age");
newage.setAccessible(
true);
newage.
set(obj,
13);
System.
out.println(obj);
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