Java setAccessible方法作用


在Java中可以通過反射進行獲取實體類中的字段值,當未設置Field的setAccessible方法為true時,會在調用的時候進行訪問安全檢查,會拋出IllegalAccessException異常

這是JDK手冊的中文說明:

那么,解決方案就是設置Field對象的Accessible的訪問標志位為Ture,就可以通過反射獲取私有變量的值,在訪問時會忽略訪問修飾符的檢查,附上例子一枚。

 1 public class MyTest3 {
 2 
 3     
 4     public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
 5         Student student = new Student();
 6         Field field = student.getClass().getDeclaredField("name");
 7         field.setAccessible(true);
 8         System.out.println(field);
 9         Object object = field.get(student);
10         System.out.println(object);
11     }
12     
13     
14     
15 }
16 
17 
18 class Student{
19     
20     private String name;
21     
22     private Integer age;
23     
24     private String sex;
25 
26     public String getName() {
27         return name;
28     }
29 
30     public void setName(String name) {
31         this.name = name;
32     }
33 
34     public Integer getAge() {
35         return age;
36     }
37 
38     public void setAge(Integer age) {
39         this.age = age;
40     }
41 
42     public String getSex() {
43         return sex;
44     }
45 
46     public void setSex(String sex) {
47         this.sex = sex;
48     }
49     
50 }
View Code

 

末尾補充下,Field類還有個靜態方法,可以一次性設置多個Field字段為指定的值。

中文JDK的說明

第一個參數 array ,就是要設置flag標志位的Field對象的數組

第二個參數 flag  ,將array數組的所有Field對象設置為flag標識符的新值

*******************Method和Field的Accessible的用法一致*******************

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM