Package javassist.tools.reflect

# Class ClassMetaobject

java.lang.Object
javassist.tools.reflect.ClassMetaobject

All Implemented Interfaces:
  `Serializable`

public class ClassMetaobject extends Object implements 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(String[] params)`
Constructs a `ClassMetaobject`.

## Method Summary

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

### 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 Details

### ClassMetaobject

public ClassMetaobject(String[] params)
Constructs a `ClassMetaobject`.

Parameters:
  `params` - `params[0]` is the name of the class of the reflective objects.

## Method Details

### getJavaClass

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

### getName

public final String getName()
Obtains the name of this class.

### isInstance

public final boolean isInstance(Object obj)
Returns true if `obj` is an instance of this class.

### newInstance

public final Object newInstance(Object[] args) throws CannotCreateException
Creates a new instance of the class.

Parameters:
  `args` - the arguments passed to the constructor.
Throws:
  `CannotCreateException`

### trapFieldRead

public Object trapFieldRead(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(String name, 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 Object invoke(Object target, int identifier, Object[] args) throws Throwable
Invokes a method whose name begins with `methodPrefix "_m_"` and the identifier.

Throws:
  `CannotInvokeException` - if the invocation fails.
  `Throwable`

### trapMethodcall

public Object trapMethodcall(int identifier, Object[] args) throws 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:
  `Throwable`

### getReflectiveMethods

public final 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 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 String getMethodName(int identifier)
Returns the name of the method specified by `identifier`.

### getParameterTypes

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

### getReturnType

public final Class<?> getReturnType(int identifier)
Returns a `Class` objects representing the return type of the method specified by `identifier`.

### getMethodIndex

public final int getMethodIndex(String originalName, Class<?>[] argTypes) throws 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:
  `NoSuchMethodException` - if the method does not exist
See Also:
  - `getMethod(int)`