Package groovy.lang

# Interface MutableMetaClass

All Superinterfaces:
  `MetaClass`, `MetaObjectProtocol`

All Known Implementing Classes:
  `ClosureMetaClass`, `DelegatingMetaClass`, `ExpandoMetaClass`, `HandleMetaClass`, `MetaClassImpl`, `MixedInMetaClass`, `MockProxyMetaClass`, `OwnedMetaClass`, `ProxyMetaClass`

    public interface MutableMetaClass
    extends MetaClass

An interface that defines methods that implementers of mutable Meta classes should specify. It provides operations to perform mutations on the MetaClass instance.

Whether a MetaClass allows mutation is up to the MetaClass itself and considerations of Thread safety need to be taken into account when making a MetaClass mutable

The default implementation allows mutation of MetaClass instances before initialisation (before the initialize() method is called) but not after, thus ensuring Thread safety once a MetaClass has been constructed and placed in the registry

Since:
  1.5
See Also:
  `MetaClassImpl`, `MetaClass`

- ## Method Summary

  Modifier and Type | Method | Description
  --- | --- | ---
  `void` | `addMetaBeanProperty​(MetaBeanProperty metaBeanProperty)` | Adds a new MetaBeanProperty to the MetaClass
  `void` | `addMetaMethod​(MetaMethod metaMethod)` | Adds a new MetaMethod to the MetaClass
  `void` | `addNewInstanceMethod​(java.lang.reflect.Method method)` | adds a new instance method to this MetaClass.
  `void` | `addNewStaticMethod​(java.lang.reflect.Method method)` | adds a new static method to this MetaClass.
  `boolean` | `isModified()` | Return whether the MetaClass has been modified or not

  ### Methods inherited from interface groovy.lang.MetaClass

  `getAttribute, getClassNode, getMetaMethods, getMethods, getProperties, getProperty, initialize, invokeMethod, invokeMissingMethod, invokeMissingProperty, pickMethod, selectConstructorAndTransformArguments, setAttribute, setProperty`

  ### Methods inherited from interface groovy.lang.MetaObjectProtocol

  `getAttribute, getMetaMethod, getMetaProperty, getProperty, getStaticMetaMethod, getTheClass, hasProperty, invokeConstructor, invokeMethod, invokeMethod, invokeStaticMethod, respondsTo, respondsTo, setAttribute, setProperty`

- ## Method Details

  - ### isModified

    boolean isModified()
    Return whether the MetaClass has been modified or not
    Returns:
      True if it has

  - ### addNewInstanceMethod

    void addNewInstanceMethod​(java.lang.reflect.Method method)
    adds a new instance method to this MetaClass. Instance methods are able to overwrite the original methods of the class. Calling this method should not be done after initialise was called.
    Parameters:
      `method` - the method to be added

  - ### addNewStaticMethod

    void addNewStaticMethod​(java.lang.reflect.Method method)
    adds a new static method to this MetaClass. This is only possible as long as initialise was not called.
    Parameters:
      `method` - the method to be added

  - ### addMetaMethod

    void addMetaMethod​(MetaMethod metaMethod)
    Adds a new MetaMethod to the MetaClass
    Parameters:
      `metaMethod` - The MetaMethod to add

  - ### addMetaBeanProperty

    void addMetaBeanProperty​(MetaBeanProperty metaBeanProperty)
    Adds a new MetaBeanProperty to the MetaClass
    Parameters:
      `metaBeanProperty` - The MetaBeanProperty instance