一、基本介绍二、类图(继承体系结构)三、基本作用四、常用方法
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 标志允许具有足够特权
将此对象的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标志的值
五、子类 Field 1)类图 关系public boolean isAccessible() {
return override;
}
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)