Java 反射調用私人域和方法(setAccessible)

來源:互聯網
上載者:User

標籤:

Java 反射調用私人域和方法(setAccessible)

@author ixenos

 

 

 

AccessibleObject類

Method、Field和Constructor類共同繼承了AccessibleObject類,該基類有兩個setAccessible方法能在運行時壓制Java語言存取控制檢查(Java language access control checks),從而能任意調用被私人化保護的方法、域和構造方法

public class AccessibleObjectextends Objectimplements AnnotatedElement

AccessibleObject 類是 Field、Method 和 Constructor 對象的基類。它提供了將反射的對象標記為在使用時取消預設 Java 語言存取控制檢查的能力。對於公用成員、預設(打包)訪問成員、受保護的成員和私人成員,在分別使用 Field、Method 或 Constructor 對象來設定或擷取欄位、調用方法,或者建立和初始化類的新執行個體的時候,會執行訪問檢查。

在反射對象中設定 accessible 標誌允許具有足夠特權的複雜應用程式(比如 Java Object Serialization 或其他持久性機制)以某種通常禁止使用的方式來操作對象。 

 

 

兩個setAccessible方法設定存取權限

 

static void setAccessible(AccessibleObject[] array, boolean flag)
          使用單一安全性檢查(為了提高效率)為一組對象設定 accessible 標誌的便捷方法。
 void setAccessible(boolean flag)
          將此對象的 accessible 標誌設定為指示的布爾值。

 

 

setAccessible
public static void setAccessible(AccessibleObject[] array,                                 boolean flag)                          throws SecurityException
使用單一安全性檢查(為了提高效率)為一組對象設定 accessible 標誌的便捷方法。

首先,如果存在安全管理器,則在 ReflectPermission("suppressAccessChecks") 許可權下調用 checkPermission 方法。

如果 flagtrue,但是不能更改輸入 array 的任何元素的可訪問性(例如,如果元素對象是 Class 類的 Constructor 對象),則會引發 SecurityException。如果發生 SecurityException,對於少於(不包括)發生異常的元素的數組元素,可以將對象的可訪問性設定為 flag;對於超出(包括)引發異常的元素的那些元素,則不更改其可訪問性。

 

參數:
array - AccessibleObjects 的數組
flag - 每個對象中的 accessible 標誌的新值
拋出:
SecurityException - 如果請求被拒絕。
另請參見:
SecurityManager.checkPermission(java.security.Permission), RuntimePermission

setAccessible
public void setAccessible(boolean flag)                   throws SecurityException
將此對象的 accessible 標誌設定為指示的布爾值。值為 true 則指示反射的對象在使用時應該取消 Java 語言訪問檢查。值為 false 則指示反射的對象應該實施 Java 語言訪問檢查。

首先,如果存在安全管理器,則在 ReflectPermission("suppressAccessChecks") 許可權下調用 checkPermission 方法。

如果 flagtrue,並且不能更改此對象的可訪問性(例如,如果此元素對象是 Class 類的 Constructor 對象),則會引發 SecurityException

如果此對象是 java.lang.Class 類的 Constructor 對象,並且 flag 為 true,則會引發 SecurityException

 

參數:
flag - accessible 標誌的新值
拋出:
SecurityException - 如果請求被拒絕。
另請參見:
SecurityManager.checkPermission(java.security.Permission), RuntimePermission

Java 反射調用私人域和方法(setAccessible)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.