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
Author:
  Graeme Rocher
See Also:
  `MetaClassImpl`, `MetaClass`

### Method Summary

Methods
`void` `addMetaBeanProperty(MetaBeanProperty metaBeanProperty)` Adds a new MetaBeanProperty to the MetaClass
`void` `addMetaMethod(MetaMethod metaMethod)` Adds a new MetaMethod to the MetaClass
`void` `addNewInstanceMethod(Method method)` adds a new instance method to this MetaClass.
`void` `addNewStaticMethod(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(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(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