public class AccessibleObject extends Object implements AnnotatedElement
在反射对象中设置accessible
标志允许具有足够权限的复杂应用程序(如Java对象序列化或其他持久性机制)以通常被禁止的方式操纵对象。
默认情况下,反射对象不可访问。
Field
, 方法
, Constructor
, ReflectPermission
Modifier | Constructor and Description |
---|---|
protected |
AccessibleObject()
构造函数:仅由Java虚拟机使用。
|
Modifier and Type | Method and Description |
---|---|
<T extends Annotation> |
getAnnotation(类<T> annotationClass)
返回该元素的,如果这样的注释
,否则返回null指定类型的注释。
|
Annotation[] |
getAnnotations()
返回此元素上
存在的注释。
|
<T extends Annotation> |
getAnnotationsByType(类<T> annotationClass)
返回与此元素相关
联的注释 。
|
<T extends Annotation> |
getDeclaredAnnotation(类<T> annotationClass)
如果这样的注释
直接存在 ,则返回指定类型的元素注释,否则返回null。
|
Annotation[] |
getDeclaredAnnotations()
返回
直接存在于此元素上的注释。
|
<T extends Annotation> |
getDeclaredAnnotationsByType(类<T> annotationClass)
如果此类注释
直接存在或
间接存在,则返回该元素的注释(指定类型)。
|
boolean |
isAccessible()
获取此对象的
accessible 标志的值。
|
boolean |
isAnnotationPresent(类<? extends Annotation> annotationClass)
如果此元素上
存在指定类型的注释,则返回true,否则返回false。
|
static void |
setAccessible(AccessibleObject[] array, boolean flag)
方便的方法来设置
accessible 标志的一系列对象的安全检查(为了效率)。
|
void |
setAccessible(boolean flag)
将此对象的
accessible 标志设置为指示的布尔值。
|
public static void setAccessible(AccessibleObject[] array, boolean flag) throws SecurityException
accessible
标志的一系列对象的安全检查(为了效率)。
首先,如果有一个安全管理器,它的checkPermission
方法被调用一个ReflectPermission("suppressAccessChecks")
权限。
甲SecurityException
如果升高flag
是true
但任何输入的元件中的可访问性array
可以不改变(例如,如果元素对象是Constructor
对象为类类
)。 在发生这种SecurityException的情况下,对于数组元素,对象的可访问性设置为flag
(并且排除)异常发生的元素; 除了(和包括)异常发生的元素以外的元素的可访问性是不变的。
array
-
array
的数组
flag
- 每个对象中的
accessible
标志的新值
SecurityException
- 如果请求被拒绝。
SecurityManager.checkPermission(java.security.Permission)
, RuntimePermission
public void setAccessible(boolean flag) throws SecurityException
accessible
标志设置为指示的布尔值。
true
的值表示反射对象应该在使用时抑制Java语言访问检查。
false
的值表示反映的对象应该强制执行Java语言访问检查。
首先,如果有一个安全管理器,它的checkPermission
方法被调用一个ReflectPermission("suppressAccessChecks")
权限。
甲SecurityException
如果升高flag
是true
但此对象的可访问性可以不改变(例如,如果该元素对象是Constructor
对象为类类
)。
一个SecurityException
如果这个对象是提高Constructor
对象类java.lang.Class
,以及flag
是真的。
flag
-
accessible
旗的新值
SecurityException
- 如果请求被拒绝。
SecurityManager.checkPermission(java.security.Permission)
, RuntimePermission
public boolean isAccessible()
accessible
标志的值。
accessible
标志
public <T extends Annotation> T getAnnotation(类<T> annotationClass)
AnnotatedElement
复制
getAnnotation
在界面
AnnotatedElement
T
- 要查询的注释类型,如果存在则返回
annotationClass
- 对应于注释类型的Class对象
NullPointerException
- 如果给定的注释类为空
public boolean isAnnotationPresent(类<? extends Annotation> annotationClass)
此方法返回的真值相当于: getAnnotation(annotationClass) != null
默认方法的主体被指定为上述代码。
isAnnotationPresent
在界面
AnnotatedElement
annotationClass
- 对应于注释类型的Class对象
NullPointerException
- 如果给定的注释类为空
public <T extends Annotation> T[] getAnnotationsByType(类<T> annotationClass)
AnnotatedElement
复制
AnnotatedElement.getAnnotation(Class)
之间的区别在于该方法检测其参数是否是可重复注释类型 (JLS 9.6),如果是,则尝试通过“查看”容器注释来查找该类型的一个或多个注释。
该方法的调用者可以自由修改返回的数组;
它将对返回给其他调用者的数组没有影响。
getAnnotationsByType
在界面
AnnotatedElement
T
- 要查询的注释类型,如果存在则返回
annotationClass
- 对应于注释类型的Class对象
NullPointerException
- 如果给定的注释类为空
public Annotation[] getAnnotations()
AnnotatedElement
复制
getAnnotations
在界面
AnnotatedElement
public <T extends Annotation> T getDeclaredAnnotation(类<T> annotationClass)
AnnotatedElement
复制
getDeclaredAnnotation
在界面
AnnotatedElement
T
- 要查询并返回的注释的类型,如果直接出现
annotationClass
- 对应于注释类型的Class对象
NullPointerException
- 如果给定的注释类为空
public <T extends Annotation> T[] getDeclaredAnnotationsByType(类<T> annotationClass)
AnnotatedElement
复制
AnnotatedElement.getDeclaredAnnotation(Class)
之间的区别在于该方法检测其参数是否是可重复注释类型 (JLS 9.6),以及如果是,尝试通过“查看”容器注释(如果存在)来查找该类型的一个或多个注释。
该方法的调用者可以自由修改返回的数组;
它将对返回给其他调用者的数组没有影响。
getDeclaredAnnotationsByType
在界面
AnnotatedElement
T
- 直接或间接出现的查询和返回的注释类型
annotationClass
- 对应于注释类型的Class对象
NullPointerException
- 如果给定的注释类为空
public Annotation[] getDeclaredAnnotations()
AnnotatedElement
复制
getDeclaredAnnotations
在界面
AnnotatedElement