JAVA Field

概述

通过反射可以获取某类的 成员变量 信息,成员变量 对应的类是 Field类,成员变量 的信息封装在Field类对象中

获取 Field 类对象

通过Class类的以下方法:

  • getDeclaredField(String name):根据 名字 获取 属性对象
  • getDeclaredFields():获得所有 属性对象
  • getField(String name):根据 名字 获取 public 的 属性对象
  • getFields():获得所有 public 的属性对象

Field 类常用方法

  • getName() 获得该成员变量的名称
  • getType() 获取表示该成员变量的 Class 对象
  • getDeclaringClass():返回定义该成员变量的 类 的 Class 对象
  • get(Object obj) 获得指定对象 obj 中成员变量的值,返回值为 Object 类型
  • set(Object obj, Object value) 将指定对象 obj 中成员变量的值设置为 value
  • getlnt(0bject obj) 获得指定对象 obj 中成员类型为 int 的成员变量的值
  • setlnt(0bject obj, int i) 将指定对象 obj 中成员变量的值设置为 i
  • setFloat(Object obj, float f) 将指定对象 obj 中成员变量的值设置为 f
  • getBoolean(Object obj) 获得指定对象 obj 中成员类型为 boolean 的成员变量的值
  • setBoolean(Object obj, boolean b) 将指定对象 obj 中成员变量的值设置为 b
  • getFloat(Object obj) 获得指定对象 obj 中成员类型为 float 的成员变量的值
  • setAccessible(boolean flag) 此方法可以设置是否忽略权限直接访问 private 等私有权限的成员变量
  • getModifiers() 获得可以解析出该方法所采用修饰符的整数

例子:
定义类

public class Student {
    String name;
    int age;
}

测试类

public class Test2 {
    public static void main(String[] args) {
        Student2 std=new Student2();
        std.name="鹿晗";
        std.age=19;
        try {
//            modifyFieldValue(std);
            printFieldInfo(std);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

    static void printFieldInfo(Object obj) throws IllegalAccessException {

        System.out.println("成员变量信息:");
        Field[] fields=obj.getClass().getDeclaredFields();
        for(Field f:fields){
            Class type=f.getType();
            Object value=f.get(obj);
            System.out.println(type.getSimpleName()+" "+f.getName()+"="+value);
        }
    }
//    修改成员变量信息
    static void modifyFieldValue(Object obj) throws IllegalAccessException {
        Field[] fields=obj.getClass().getDeclaredFields();
        fields[0].set(obj,"吴亦凡");
        fields[1].set(obj,25);
    }
}

感谢:
https://www.jianshu.com/p/9be58ee20dee
https://www.cnblogs.com/qi-yi/p/18029192


原文出处:/show_1EF4tJ3LlrQN.html