栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java.lang.reflect.AccessibleObject

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/727212.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号