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

    All Methods Instance Methods Abstract Methods
    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​(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.
    `Iterator` | `iterator()` | Gets a snapshot of the current constant meta classes and returns it as Iterator.
    `void` | `removeMetaClass​(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​(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​(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​(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​(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

          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