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

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)` adds a ConstantMetaClassChangeListener
    `MetaClass` | `getMetaClass(Class theClass)`
    `MetaClassRegistry.MetaClassCreationHandle` | `getMetaClassCreationHandler()` Retrieves the MetaClassCreationHandle that is responsible for constructing MetaClass instances
    `MetaClassRegistryChangeEventListener[]` | `getMetaClassRegistryChangeEventListeners()` Returns all registered ConstantMetaClassChangeListener objects.
    `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 ConstantMetaClassChangeListener
    `void` | `setMetaClass(Class theClass, MetaClass theMetaClass)`
    `void` | `setMetaClassCreationHandle(MetaClassRegistry.MetaClassCreationHandle handle)` Sets the MetaClassCreationHandle instance that is responsible for constructing instances

- - ### Method Detail

    - #### getMetaClass

          MetaClass getMetaClass(Class theClass)

    - #### setMetaClass

          void setMetaClass(Class theClass,
                          MetaClass theMetaClass)

    - #### 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 ConstantMetaClassChangeListener
      Parameters:
        `listener` - - the update listener

    - #### removeMetaClassRegistryChangeEventListener

          void removeMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)

      removes a ConstantMetaClassChangeListener
      Parameters:
        `listener` - - the update listener

    - #### getMetaClassRegistryChangeEventListeners

          MetaClassRegistryChangeEventListener[] getMetaClassRegistryChangeEventListeners()

      Returns all registered ConstantMetaClassChangeListener objects.
      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 ConcurrentMoidificationExcpetion. 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.
      This Iterator may not used in multiple threads.
      Returns:
        Iterator for the constant meta classes