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
    Modifier and Type | Interface and 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 and 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 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