http://blog.csdn.net/kjfcpua/article/details/8496911
java代碼中,常常將一個類的成員變量置為private
在類的外面獲取此類的私有成員變量的value時,需要注意:
測試類:
1 public class AccessibleTest { 2 3 private int id; 4 private String name; 5 6 public AccessibleTest() { 7 8 } 9 10 public int getId() { 11 return id; 12 } 13 14 public void setId(int id) { 15 this.id = id; 16 } 17 18 public String getName() { 19 return name; 20 } 21 22 public void setName(String name) { 23 this.name = name; 24 } 25 26 }
Main類:
1 public class Main { 2 3 public static void main(String[] args) throws Exception { 4 Class clazz = Class.forName("com.test.accessible.AccessibleTest"); 5 AccessibleTest at = new AccessibleTest(); 6 at.setId(1); 7 at.setName("AT"); 8 for (Field f : clazz.getDeclaredFields()) { 9 f.setAccessible(true);//AccessibleTest類中的成員變量為private,故必須進行此操作 10 System.out.println(f.get(at));//獲取當前對象中當前Field的value 11 } 12 13 } 14 15 }
如果沒有在獲取Field之前調用setAccessible(true)方法,異常:
(當然在AccessibleTest類的內部(AccessibleTest的內部類除外),進行如上操作則不需要調用setAccesible()方法)
- java.lang.IllegalAccessException:
- Class com.test.accessible.Main
- can not access
- a member of class com.test.accessible.AccessibleTest
- with modifiers "private"