Home » openjdk-7 » java » lang » reflect » [javadoc | source]
java.lang.reflect
public class: AccessibleObject [javadoc | source]
java.lang.Object
   java.lang.reflect.AccessibleObject

All Implemented Interfaces:
    AnnotatedElement

Direct Known Subclasses:
    Constructor, Method, Field

The AccessibleObject class is the base class for Field, Method and Constructor objects. It provides the ability to flag a reflected object as suppressing default Java language access control checks when it is used. The access checks--for public, default (package) access, protected, and private members--are performed when Fields, Methods or Constructors are used to set or get fields, to invoke methods, or to create and initialize new instances of classes, respectively.

Setting the {@code 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 Summary
 boolean override     
static final  ReflectionFactory reflectionFactory     
volatile  Object securityCheckCache     
Constructor:
 protected AccessibleObject() 
Method from java.lang.reflect.AccessibleObject Summary:
checkAccess,   getAnnotation,   getAnnotations,   getDeclaredAnnotations,   isAccessible,   isAnnotationPresent,   setAccessible,   setAccessible,   slowCheckMemberAccess
Methods from java.lang.Object:
clone,   equals,   finalize,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from java.lang.reflect.AccessibleObject Detail:
  void checkAccess(Class<?> caller,
    Class<?> clazz,
    Object obj,
    int modifiers) throws IllegalAccessException 
 public T getAnnotation(Class<T> annotationClass) 
 public Annotation[] getAnnotations() 
 public Annotation[] getDeclaredAnnotations() 
 public boolean isAccessible() 
    Get the value of the {@code accessible} flag for this object.
 public boolean isAnnotationPresent(Class<Annotation> annotationClass) 
 public  void setAccessible(boolean flag) throws SecurityException 
    Set the {@code accessible} flag for this object to the indicated boolean value. A value of {@code true} indicates that the reflected object should suppress Java language access checking when it is used. A value of {@code false} indicates that the reflected object should enforce Java language access checks.

    First, if there is a security manager, its {@code checkPermission} method is called with a {@code ReflectPermission("suppressAccessChecks")} permission.

    A {@code SecurityException} is raised if {@code flag} is {@code true} but accessibility of this object may not be changed (for example, if this element object is a Constructor object for the class java.lang.Class ).

    A {@code SecurityException} is raised if this object is a java.lang.reflect.Constructor object for the class {@code java.lang.Class}, and {@code flag} is true.

 public static  void setAccessible(AccessibleObject[] array,
    boolean flag) throws SecurityException 
    Convenience method to set the {@code accessible} flag for an array of objects with a single security check (for efficiency).

    First, if there is a security manager, its {@code checkPermission} method is called with a {@code ReflectPermission("suppressAccessChecks")} permission.

    A {@code SecurityException} is raised if {@code flag} is {@code true} but accessibility of any of the elements of the input {@code array} may not be changed (for example, if the element object is a Constructor object for the class java.lang.Class ). In the event of such a SecurityException, the accessibility of objects is set to {@code 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.

  void slowCheckMemberAccess(Class<?> caller,
    Class<?> clazz,
    Object obj,
    int modifiers,
    Class<?> targetClass) throws IllegalAccessException