public class AccessibleObject extends Object implements AnnotatedElement
Setting the accessible
flag in a reflected object
permits sophisticated applications with sufficient privilege, such
as Java Object Serialization or other persistence mechanisms, to
manipulate objects in a manner that would normally be prohibited.
By default, a reflected object is not accessible.
Field
,
Method
,
Constructor
,
ReflectPermission
Modifier | Constructor and Description |
---|---|
protected |
AccessibleObject()
Constructor: only used by the Java Virtual Machine.
|
Modifier and Type | Method and Description |
---|---|
<T extends Annotation> |
getAnnotation(Class<T> annotationClass)
Returns this element's annotation for the specified type if
such an annotation is present, else null.
|
Annotation[] |
getAnnotations()
Returns annotations that are present on this element.
|
<T extends Annotation> |
getAnnotationsByType(Class<T> annotationClass)
Returns annotations that are associated with this element.
|
<T extends Annotation> |
getDeclaredAnnotation(Class<T> annotationClass)
Returns this element's annotation for the specified type if
such an annotation is directly present, else null.
|
Annotation[] |
getDeclaredAnnotations()
Returns annotations that are directly present on this element.
|
<T extends Annotation> |
getDeclaredAnnotationsByType(Class<T> annotationClass)
Returns this element's annotation(s) for the specified type if
such annotations are either directly present or
indirectly present.
|
boolean |
isAccessible()
Get the value of the
accessible flag for this object. |
boolean |
isAnnotationPresent(Class<? extends Annotation> annotationClass)
Returns true if an annotation for the specified type
is present on this element, else false.
|
static void |
setAccessible(AccessibleObject[] array,
boolean flag)
Convenience method to set the
accessible flag for an
array of objects with a single security check (for efficiency). |
void |
setAccessible(boolean flag)
Set the
accessible flag for this object to
the indicated boolean value. |
protected AccessibleObject()
public static void setAccessible(AccessibleObject[] array, boolean flag) throws SecurityException
accessible
flag for an
array of objects with a single security check (for efficiency).
First, if there is a security manager, its
checkPermission
method is called with a
ReflectPermission("suppressAccessChecks")
permission.
A SecurityException
is raised if flag
is
true
but accessibility of any of the elements of the input
array
may not be changed (for example, if the element
object is a Constructor
object for the class Class
). In the event of such a SecurityException, the
accessibility of objects is set to flag
for array elements
upto (and excluding) the element for which the exception occurred; the
accessibility of elements beyond (and including) the element for which
the exception occurred is unchanged.
array
- the array of AccessibleObjectsflag
- the new value for the accessible
flag
in each objectSecurityException
- if the request is denied.SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
public void setAccessible(boolean flag) throws SecurityException
accessible
flag for this object to
the indicated boolean value. A value of true
indicates that
the reflected object should suppress Java language access
checking when it is used. A value of false
indicates
that the reflected object should enforce Java language access checks.
First, if there is a security manager, its
checkPermission
method is called with a
ReflectPermission("suppressAccessChecks")
permission.
A SecurityException
is raised if flag
is
true
but accessibility of this object may not be changed
(for example, if this element object is a Constructor
object for
the class Class
).
A SecurityException
is raised if this object is a Constructor
object for the class
java.lang.Class
, and flag
is true.
flag
- the new value for the accessible
flagSecurityException
- if the request is denied.SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
public boolean isAccessible()
accessible
flag for this object.accessible
flagpublic <T extends Annotation> T getAnnotation(Class<T> annotationClass)
AnnotatedElement
getAnnotation
in interface AnnotatedElement
T
- the type of the annotation to query for and return if presentannotationClass
- the Class object corresponding to the
annotation typeNullPointerException
- if the given annotation class is nullpublic boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
The truth value returned by this method is equivalent to:
getAnnotation(annotationClass) != null
The body of the default method is specified to be the code above.
isAnnotationPresent
in interface AnnotatedElement
annotationClass
- the Class object corresponding to the
annotation typeNullPointerException
- if the given annotation class is nullpublic <T extends Annotation> T[] getAnnotationsByType(Class<T> annotationClass)
AnnotatedElement
AnnotatedElement.getAnnotation(Class)
is that this method detects if its argument is a repeatable
annotation type (JLS 9.6), and if so, attempts to find one or
more annotations of that type by "looking through" a container
annotation.
The caller of this method is free to modify the returned array; it will
have no effect on the arrays returned to other callers.getAnnotationsByType
in interface AnnotatedElement
T
- the type of the annotation to query for and return if presentannotationClass
- the Class object corresponding to the
annotation typeNullPointerException
- if the given annotation class is nullpublic Annotation[] getAnnotations()
AnnotatedElement
getAnnotations
in interface AnnotatedElement
public <T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass)
AnnotatedElement
getDeclaredAnnotation
in interface AnnotatedElement
T
- the type of the annotation to query for and return if directly presentannotationClass
- the Class object corresponding to the
annotation typeNullPointerException
- if the given annotation class is nullpublic <T extends Annotation> T[] getDeclaredAnnotationsByType(Class<T> annotationClass)
AnnotatedElement
AnnotatedElement.getDeclaredAnnotation(Class)
is that this method detects if its
argument is a repeatable annotation type (JLS 9.6), and if so,
attempts to find one or more annotations of that type by "looking
through" a container annotation if one is present.
The caller of this method is free to modify the returned array; it will
have no effect on the arrays returned to other callers.getDeclaredAnnotationsByType
in interface AnnotatedElement
T
- the type of the annotation to query for and return
if directly or indirectly presentannotationClass
- the Class object corresponding to the
annotation typeNullPointerException
- if the given annotation class is nullpublic Annotation[] getDeclaredAnnotations()
AnnotatedElement
getDeclaredAnnotations
in interface AnnotatedElement
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2022, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.