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