groovy.lang

## Interface MetaClassRegistry

All Known Implementing Classes:
  MetaClassRegistryImpl

    public interface MetaClassRegistry

A MetaClassRegistry is an object that is responsible for managing the a cache of MetaClass instances. Each java.lang.Class instance has an associated MetaClass and client code can query this interface for the MetaClass for a given associated java.lang.Class

Author:
  John Wilson, Graeme Rocher, Jochen Theodorou
See Also:
  `MetaClass`

### Nested Class Summary

Nested Classes
`static class` `MetaClassRegistry.MetaClassCreationHandle` Class used as base for the creation of MetaClass implementations.

### Method Summary

All Methods Instance Methods Abstract Methods
`void` `addMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)` Adds a meta class change listener for constant meta classes
`void` `addNonRemovableMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)` Adds a meta class change listener for constant meta classes.
`MetaClass` `getMetaClass(java.lang.Class theClass)` The main function of the registry If a meta class exists then return it otherwise create one, put it in the registry and return it
`MetaClassRegistry.MetaClassCreationHandle` `getMetaClassCreationHandler()` Retrieves the MetaClassCreationHandle that is responsible for constructing MetaClass instances
`MetaClassRegistryChangeEventListener[]` `getMetaClassRegistryChangeEventListeners()` Returns all registered class change listener for constant meta classes.
`java.util.Iterator` `iterator()` Gets a snapshot of the current constant meta classes and returns it as Iterator.
`void` `removeMetaClass(java.lang.Class theClass)` Removes a cached MetaClass from the registry
`void` `removeMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)` Removes a meta class change listener for constant meta classes
`void` `setMetaClass(java.lang.Class theClass, MetaClass theMetaClass)` Adds a metaclass to the registry for the given class
`void` `setMetaClassCreationHandle(MetaClassRegistry.MetaClassCreationHandle handle)` Sets the MetaClassCreationHandle instance that is responsible for constructing instances

### Method Detail

#### getMetaClass

    MetaClass getMetaClass(java.lang.Class theClass)

The main function of the registry If a meta class exists then return it otherwise create one, put it in the registry and return it

#### setMetaClass

    void setMetaClass(java.lang.Class theClass,
                      MetaClass theMetaClass)

Adds a metaclass to the registry for the given class

Parameters:
  `theClass` - The class
  `theMetaClass` - The MetaClass for theClass

#### removeMetaClass

    void removeMetaClass(java.lang.Class theClass)

Removes a cached MetaClass from the registry

Parameters:
  `theClass` - The Java class of the MetaClass to remove

#### getMetaClassCreationHandler

    MetaClassRegistry.MetaClassCreationHandle getMetaClassCreationHandler()

Retrieves the MetaClassCreationHandle that is responsible for constructing MetaClass instances

Returns:
  The MetaClassCreationHandle instance

#### setMetaClassCreationHandle

    void setMetaClassCreationHandle(MetaClassRegistry.MetaClassCreationHandle handle)

Sets the MetaClassCreationHandle instance that is responsible for constructing instances

Parameters:
  `handle` - The handle instance

#### addMetaClassRegistryChangeEventListener

    void addMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)

Adds a meta class change listener for constant meta classes

Parameters:
  `listener` - - the update listener

#### addNonRemovableMetaClassRegistryChangeEventListener

    void addNonRemovableMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)

Adds a meta class change listener for constant meta classes. This listener cannot be removed!

Parameters:
  `listener` - - the update listener

#### removeMetaClassRegistryChangeEventListener

    void removeMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)

Removes a meta class change listener for constant meta classes

Parameters:
  `listener` - - the update listener

#### getMetaClassRegistryChangeEventListeners

    MetaClassRegistryChangeEventListener[] getMetaClassRegistryChangeEventListeners()

Returns all registered class change listener for constant meta classes.

Returns:
  an array containing all change listener

#### iterator

    java.util.Iterator iterator()

Gets a snapshot of the current constant meta classes and returns it as Iterator. Modifications done using this Iterator will not cause a ConcurrentModificationException. If a MetaClass is removed using this Iterator, then the MetaClass will only be removed if the MetaClass was not replaced by another MetaClass in the meantime. If a MetaClass is added while using this Iterator, then it will be part of the Iteration. If a MetaClass replaces another constant meta class, then the Iteration might show two meta classes for the same class.

Note: This Iterator may not used with multiple threads.

Returns:
  Iterator for the constant meta classes