我是靠谱客的博主 细腻酒窝,最近开发中收集的这篇文章主要介绍Java 反射 调用私有域和方法(setAccessible),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 voidsetAccessible(AccessibleObject[] array, boolean flag) 
          使用单一安全性检查(为了提高效率)为一组对象设置 accessible 标志的便捷方法。
 voidsetAccessible(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 - 如果请求被拒绝。

 

转自   https://www.cnblogs.com/ixenos/p/5699420.html

最后

以上就是细腻酒窝为你收集整理的Java 反射 调用私有域和方法(setAccessible)的全部内容,希望文章能够帮你解决Java 反射 调用私有域和方法(setAccessible)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部