java.lang.reflect.AccessibleObject

java.lang.reflect.AccessibleObject,第1张

java.lang.reflect.AccessibleObject

文章目录

一、基本介绍二、类图(继承体系结构)三、基本作用四、常用方法

1)setAccessible(boolean flag)2)isAccessible() 五、子类 Field

1)类图 关系2) demo实践(POI导出Excel)

一、基本介绍

java.lang.reflect.AccessibleObject类是Field,Method和Constructor类对象的基类。 它提供了将反射对象标记为在使用它时抑制默认Java语言访问控制检查的功能。 当使用Fields,Methods或Constructors类对象来设置或获取字段,调用方法,或创建和初始化新的类实例时,执行访问分别检查(对于public,默认(包)访问,protected和private成员) 。
在反射对象中设置可访问标志允许具有足够权限的复杂应用程序(如Java对象序列化或其他持久性机制)以被禁止的方式 *** 作对象。

二、类图(继承体系结构)

(查看类图快捷键mac:command+option+shift+U)

三、基本作用

1、将反射的对象标记为在使用时取消默认 Java 语言访问控制检查的能力。
2、在反射对象中设置accessible 标志允许具有足够特权

四、常用方法 1)setAccessible(boolean flag)

将此对象的accessible标志设置为指示的布尔值。 值为true表示反射对象在使用时应禁止 Java 语言访问检查。 值false表示反射对象应该强制执行 Java 语言访问检查。
首先,如果存在安全管理器,则使用ReflectPermission(“suppressAccessChecks”)权限调用其checkPermission方法。
如果flag为true但此对象的可访问性可能不会更改(例如,如果此元素对象是类Class的Constructor对象),则会引发SecurityException 。
如果此对象是类java.lang.Class的Constructor对象,并且flag为真,则会引发SecurityException 。

参数:flag – accessible标志的新值
抛出:SecurityException – 如果请求被拒绝。
也可以看看:SecurityManager.checkPermission , RuntimePermission

public void setAccessible(boolean flag) throws SecurityException {
SecurityManager sm = System.getSecurityManager();
if (sm != null) sm.checkPermission(ACCESS_PERMISSION);
setAccessible0(this, flag);
}

当输入参数flag为true的时候,指示反射对象被使用时取消Java语言访问权限的检查。

当输入参数flag为false的时候,指示反射对象应该实施Java语言访问权限的检查。

2)isAccessible()

获取此对象的accessible标志的值。
返回:对象的accessible标志的值

public boolean isAccessible() {
return override;
}

五、子类 Field 1)类图 关系

public final
class Field extends AccessibleObject implements Member {
2) demo实践(POI导出Excel)

上篇博客讲述了对Field的基本使用setAccessible作用,突然想到了在POI实现导出Excel的功能时,也是通过反射获取属性信息的。
如下是poi部分代码:

Field field = obj.getClass().getDeclaredField(dataBeans.get(j).getType());
            if (field != null) {
              field.setAccessible(true);
              Object va = field.get(obj);
              if (va == null) {
                va = "";
              }
              sheet.addCell(new Label(j, i, va.toString(), wcf_left));
            }

之前写过一篇导出Excel,反射获取信息报错的文章,主要就是如何获取父类实体信息反射 getDeclaredField 报错java.lang.NoSuchFieldException

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5722551.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存