setAccessible()方法

  • 2019 年 11 月 14 日
  • 筆記

在java代码中,我们经常使用private来控制类中成员变量的访问权限,在类的外边我们一般使用get方法获取私有成员变量的值,但是如果类中没有get方法,但我们又想获取该类私有成员变量的值,该怎么办?

  • 可以使用反射获取类中成员变量
  • 再使用 accessible() 来临时改变访问权限,就可以获取私有成员变量的值了

测试类

package com.ljw.accessible;    public class AccessibleDemo {      private int id;      private String name;        public void setId(int id) {          this.id = id;      }        public void setName(String name) {          this.name = name;      }  }

测试

package com.ljw.accessible;  import java.lang.reflect.Field;    public class Test {      @org.junit.Test      public void accessibleTest() throws ClassNotFoundException, IllegalAccessException {          Class clazz = Class.forName("com.ljw.accessible.AccessibleDemo");          AccessibleDemo ad = new AccessibleDemo();          ad.setId(2);          ad.setName("AI");          for(Field f : clazz.getDeclaredFields()){              System.out.println("---------------------------");              System.out.println(f.isAccessible()); // 查看该字段的访问权限,不能访问返回false              f.setAccessible(true); // 将该字段的访问权限改为true              System.out.println(f.isAccessible());              System.out.println(f.getName()+":"+f.get(ad));));          }      }  }

结果:

---------------------------  false  true  id:2  ---------------------------  false  true  name:AI