
正文
Java setAccessible方法作用
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
在Java中可以通过反射进行获取实体类中的字段值,当未设置Field的setAccessible方法为true时,会在调用的时候进行访问安全检查,会抛出IllegalAccessException异常
这是JDK手册的中文说明:
那么,解决方案就是设置Field对象的Accessible的访问标志位为Ture,就可以通过反射获取私有变量的值,在访问时会忽略访问修饰符的检查,附上例子一枚。
public class MyTest3 {
public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
Student student = new Student();
Field field = student.getClass().getDeclaredField("name");
field.setAccessible(true);
System.out.println(field);
Object object = field.get(student);
System.out.println(object);
}
}
class Student{
private String name;
private Integer age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
末尾补充下,Field类还有个静态方法,可以一次性设置多个Field字段为指定的值。
中文JDK的说明
第一个参数 array ,就是要设置flag标志位的Field对象的数组
第二个参数 flag ,将array数组的所有Field对象设置为flag标识符的新值
*******************Method和Field的Accessible的用法一致*******************





