A Metaobject is created for
every object at the base level. A different reflective object is
associated with a different metaobject.
The metaobject intercepts method calls
on the reflective object at the base-level. To change the behavior
of the method calls, a subclass of Metaobject
should be defined.
To obtain a metaobject, calls _getMetaobject()
on a reflective object. For example,
Metaobject m = ((Metalevel)reflectiveObject)._getMetaobject();
javassist.tools.reflect.ClassMetaobject , javassist.tools.reflect.Metalevel
| Modifier and Type | Field and Description |
|---|---|
| protected Metalevel | |
| protected ClassMetaobject | |
| protected Method[] | |
| private static final long | serialVersionUID
default serialVersionUID |
| Access | Constructor and Description |
|---|---|
| public | Metaobject(Object
the object that this metaobject is associated with. self, Object[] the parameters passed to the constructor of
args)self.Constructs a |
| protected |
| Modifier and Type | Method and Description |
|---|---|
| public final ClassMetaobject | |
| public final String | |
| public final Object | |
| public final Class | getParameterTypes(int identifier)
Returns an array of |
| public final Class | getReturnType(int identifier)
Returns a |
| private void | |
| public final void | |
| public Object | trapFieldRead(String name)
Is invoked when public fields of the base-level class are read and the runtime system intercepts it. |
| public void | trapFieldWrite(String name, Object value)
Is invoked when public fields of the base-level class are modified and the runtime system intercepts it. |
| public Object | trapMethodcall(int identifier, Object[] args)
Is invoked when base-level method invocation is intercepted. |
| private void |
| baseobject | back to summary |
|---|---|
| protected Metalevel baseobject | |
| classmetaobject | back to summary |
|---|---|
| protected ClassMetaobject classmetaobject | |
| methods | back to summary |
|---|---|
| protected Method[] methods | |
| serialVersionUID | back to summary |
|---|---|
| private static final long serialVersionUID default serialVersionUID | |
| Metaobject | back to summary |
|---|---|
| public Metaobject(Object self, Object[] args) Constructs a | |
| Metaobject | back to summary |
|---|---|
| protected Metaobject() Constructs a | |
| getClassMetaobject | back to summary |
|---|---|
| public final ClassMetaobject getClassMetaobject() Obtains the class metaobject associated with this metaobject. | |
| getMethodName | back to summary |
|---|---|
| public final String getMethodName(int identifier) Returns the name of the method specified
by | |
| getObject | back to summary |
|---|---|
| public final Object getObject() Obtains the object controlled by this metaobject. | |
| getParameterTypes | back to summary |
|---|---|
| public final Class Returns an array of | |
| getReturnType | back to summary |
|---|---|
| public final Class Returns a | |
| readObject | back to summary |
|---|---|
| private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException | |
| setObject | back to summary |
|---|---|
| public final void setObject(Object self) Changes the object controlled by this metaobject.
| |
| trapFieldRead | back to summary |
|---|---|
| public Object trapFieldRead(String name) Is invoked when public 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 | back to summary |
|---|---|
| public void trapFieldWrite(String name, Object value) Is invoked when public 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. | |
| trapMethodcall | back to summary |
|---|---|
| public Object trapMethodcall(int identifier, Object[] args) throws Throwable Is invoked when base-level method invocation is intercepted. 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. Note this method is not invoked if the base-level method is invoked by a constructor in the super class. For example,
abstract class A {
abstract void initialize();
A() {
initialize(); // not intercepted
}
}
class B extends A {
void initialize() { System.out.println("initialize()"); }
B() {
super();
initialize(); // intercepted
}
}
if an instance of B is created, the invocation of initialize() in B is intercepted only once. The first invocation by the constructor in A is not intercepted. This is because the link between a base-level object and a metaobject is not created until the execution of a constructor of the super class finishes. | |
| writeObject | back to summary |
|---|---|
| private void writeObject(ObjectOutputStream out) throws IOException | |