Package 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

See Also:
  `MetaClass`

- ## Nested Class Summary

  Nested Classes
  Modifier and Type | Interface | Description
  --- | --- | ---
  `static class` | `MetaClassRegistry.MetaClassCreationHandle` | Class used as base for the creation of MetaClass implementations.

- ## Method Summary

  Modifier and Type | Method | Description
  --- | --- | ---
  `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 Details

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