Java反射方法method.setAccessible(true)__Java

來源:互聯網
上載者:User

Java代碼中,常常將一個類的成員變數置為private

 

在類的外面擷取此類的私人成員變數的value時,需要注意:

 

測試類別: public class AccessibleTest {          private int id;       private String name;          public AccessibleTest() {          }          public int getId() {           return id;       }          public void setId(int id) {           this.id = id;       }          public String getName() {           return name;       }          public void setName(String name) {           this.name = name;       }      }  

 

Main類: Java代碼   public class Main {          public static void main(String[] args) throws Exception {           Class clazz = Class.forName("com.test.accessible.AccessibleTest");           AccessibleTest at = new AccessibleTest();           at.setId(1);           at.setName("AT");           for (Field f : clazz.getDeclaredFields()) {               f.setAccessible(true);//AccessibleTest類中的成員變數為private,故必須進行此操作               System.out.println(f.get(at));//擷取當前對象中當前Field的value           }          }      }  

如果沒有在擷取Field之前調用setAccessible(true)方法,異常: Java代碼    java.lang.IllegalAccessException:   Class com.test.accessible.Main    can not access    a member of class com.test.accessible.AccessibleTest   with modifiers "private"    

當然在AccessibleTest類的內部(AccessibleTest的內部類除外)

進行如上操作則不需要調用setAccesible()方法

明顯 Accessible並不是標識方法能否訪問的. public的方法 Accessible仍為false 
使用了method.setAccessible(true)後 效能有了20倍的提升
Accessable屬性是繼承自AccessibleObject 類. 功能是啟用或禁用安全檢查

JDK API中的解釋
引用
AccessibleObject 類是 Field、Method 和 Constructor 對象的基類。它提供了將反射的對象標記為在使用時取消預設 Java 語言存取控制檢查的能力。對於公用成員、預設(打包)訪問成員、受保護的成員和私人成員,在分別使用 Field、Method 或 Constructor 對象來設定或獲得欄位、調用方法,或者建立和初始化類的新執行個體的時候,會執行訪問檢查。
在反射對象中設定 accessible 標誌允許具有足夠特權的複雜應用程式(比如 Java Object Serialization 或

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.