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