Field获取java类中的成员变量名

xiaoxiao2021-02-28  58

利用反射机制获取成员变量的变量名

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

转载请注明原文地址: https://www.6miu.com/read-84358.html

最新回复(0)