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 方法。

如果 flag 為 true,但是不能更改輸入 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 方法。

如果 flag 為 true,並且不能更改此對象的可訪問性(例如,如果此元素對象是 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.