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

    Methods
    Modifier and Type | Method and 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 Detail

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