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, 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

猜你喜欢

转载自blog.csdn.net/mccand1234/article/details/74999736