Class ClassMetaobject

  • All Implemented Interfaces:
    java.io.Serializable

    public class ClassMetaobject
    extends java.lang.Object
    implements java.io.Serializable
    A runtime class metaobject.

    A ClassMetaobject is created for every class of reflective objects. It can be used to hold values shared among the reflective objects of the same class.

    To obtain a class metaobject, calls _getClass() on a reflective object. For example,

    ClassMetaobject cm = ((Metalevel)reflectiveObject)._getClass();
     
    See Also:
    Metaobject, Metalevel, Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static boolean useContextClassLoader
      Specifies how a java.lang.Class object is loaded.
    • Constructor Summary

      Constructors 
      Constructor Description
      ClassMetaobject​(java.lang.String[] params)
      Constructs a ClassMetaobject.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.lang.Class<?> getJavaClass()
      Obtains the java.lang.Class representing this class.
      java.lang.reflect.Method getMethod​(int identifier)
      Returns the java.lang.reflect.Method object representing the method specified by identifier.
      int getMethodIndex​(java.lang.String originalName, java.lang.Class<?>[] argTypes)
      Returns the identifier index of the method, as identified by its original name.
      java.lang.String getMethodName​(int identifier)
      Returns the name of the method specified by identifier.
      java.lang.String getName()
      Obtains the name of this class.
      java.lang.Class<?>[] getParameterTypes​(int identifier)
      Returns an array of Class objects representing the formal parameter types of the method specified by identifier.
      java.lang.reflect.Method[] getReflectiveMethods()
      Returns an array of the methods defined on the given reflective object.
      java.lang.Class<?> getReturnType​(int identifier)
      Returns a Class objects representing the return type of the method specified by identifier.
      static java.lang.Object invoke​(java.lang.Object target, int identifier, java.lang.Object[] args)
      Invokes a method whose name begins with methodPrefix "_m_" and the identifier.
      boolean isInstance​(java.lang.Object obj)
      Returns true if obj is an instance of this class.
      java.lang.Object newInstance​(java.lang.Object[] args)
      Creates a new instance of the class.
      java.lang.Object trapFieldRead​(java.lang.String name)
      Is invoked when static fields of the base-level class are read and the runtime system intercepts it.
      void trapFieldWrite​(java.lang.String name, java.lang.Object value)
      Is invoked when static fields of the base-level class are modified and the runtime system intercepts it.
      java.lang.Object trapMethodcall​(int identifier, java.lang.Object[] args)
      Is invoked when static methods of the base-level class are called and the runtime system intercepts it.
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • useContextClassLoader

        public static boolean useContextClassLoader
        Specifies how a java.lang.Class object is loaded.

        If true, it is loaded by:

        Thread.currentThread().getContextClassLoader().loadClass()

        If false, it is loaded by Class.forName(). The default value is false.

    • Constructor Detail

      • ClassMetaobject

        public ClassMetaobject​(java.lang.String[] params)
        Constructs a ClassMetaobject.
        Parameters:
        params - params[0] is the name of the class of the reflective objects.
    • Method Detail

      • getJavaClass

        public final java.lang.Class<?> getJavaClass()
        Obtains the java.lang.Class representing this class.
      • getName

        public final java.lang.String getName()
        Obtains the name of this class.
      • isInstance

        public final boolean isInstance​(java.lang.Object obj)
        Returns true if obj is an instance of this class.
      • newInstance

        public final java.lang.Object newInstance​(java.lang.Object[] args)
                                           throws CannotCreateException
        Creates a new instance of the class.
        Parameters:
        args - the arguments passed to the constructor.
        Throws:
        CannotCreateException
      • trapFieldRead

        public java.lang.Object trapFieldRead​(java.lang.String name)
        Is invoked when static fields of the base-level class are read and the runtime system intercepts it. This method simply returns the value of the field.

        Every subclass of this class should redefine this method.

      • trapFieldWrite

        public void trapFieldWrite​(java.lang.String name,
                                   java.lang.Object value)
        Is invoked when static fields of the base-level class are modified and the runtime system intercepts it. This method simply sets the field to the given value.

        Every subclass of this class should redefine this method.

      • invoke

        public static java.lang.Object invoke​(java.lang.Object target,
                                              int identifier,
                                              java.lang.Object[] args)
                                       throws java.lang.Throwable
        Invokes a method whose name begins with methodPrefix "_m_" and the identifier.
        Throws:
        CannotInvokeException - if the invocation fails.
        java.lang.Throwable
      • trapMethodcall

        public java.lang.Object trapMethodcall​(int identifier,
                                               java.lang.Object[] args)
                                        throws java.lang.Throwable
        Is invoked when static methods of the base-level class are called and the runtime system intercepts it. This method simply executes the intercepted method invocation with the original parameters and returns the resulting value.

        Every subclass of this class should redefine this method.

        Throws:
        java.lang.Throwable
      • getReflectiveMethods

        public final java.lang.reflect.Method[] getReflectiveMethods()
        Returns an array of the methods defined on the given reflective object. This method is for the internal use only.
      • getMethod

        public final java.lang.reflect.Method getMethod​(int identifier)
        Returns the java.lang.reflect.Method object representing the method specified by identifier.

        Note that the actual method returned will be have an altered, reflective name i.e. _m_2_...

        Parameters:
        identifier - the identifier index given to trapMethodcall() etc.
        See Also:
        Metaobject.trapMethodcall(int,Object[]), trapMethodcall(int,Object[])
      • getMethodName

        public final java.lang.String getMethodName​(int identifier)
        Returns the name of the method specified by identifier.
      • getParameterTypes

        public final java.lang.Class<?>[] getParameterTypes​(int identifier)
        Returns an array of Class objects representing the formal parameter types of the method specified by identifier.
      • getReturnType

        public final java.lang.Class<?> getReturnType​(int identifier)
        Returns a Class objects representing the return type of the method specified by identifier.
      • getMethodIndex

        public final int getMethodIndex​(java.lang.String originalName,
                                        java.lang.Class<?>[] argTypes)
                                 throws java.lang.NoSuchMethodException
        Returns the identifier index of the method, as identified by its original name.

        This method is useful, in conjuction with getMethod(int), to obtain a quick reference to the original method in the reflected class (i.e. not the proxy method), using the original name of the method.

        Written by Brett Randall and Shigeru Chiba.

        Parameters:
        originalName - The original name of the reflected method
        argTypes - array of Class specifying the method signature
        Returns:
        the identifier index of the original method
        Throws:
        java.lang.NoSuchMethodException - if the method does not exist
        See Also:
        getMethod(int)