Package groovy.lang

# Interface MetaClassRegistry

All Known Implementing Classes:
  `MetaClassRegistryImpl`

public interface MetaClassRegistry
A MetaClassRegistry is an object that is responsible for managing 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 metaclass change listener for constant metaclasses
  `void`
  `addNonRemovableMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)`
  Adds a metaclass change listener for constant metaclasses.
  `MetaClass`
  `getMetaClass(Class theClass)`
  The main function of the registry If a metaclass 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 metaclasses.
  `Iterator`
  `iterator()`
  Gets a snapshot of the current constant metaclasses and returns it as Iterator.
  `void`
  `removeMetaClass(Class theClass)`
  Removes a cached MetaClass from the registry
  `void`
  `removeMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)`
  Removes a metaclass change listener for constant metaclasses
  `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 Details

  - ### getMetaClass

    MetaClass getMetaClass(Class theClass)
    The main function of the registry If a metaclass 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 metaclass change listener for constant metaclasses
    Parameters:
      `listener` - - the update listener

  - ### addNonRemovableMetaClassRegistryChangeEventListener

    void addNonRemovableMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)
    Adds a metaclass change listener for constant metaclasses. This listener cannot be removed!
    Parameters:
      `listener` - - the update listener

  - ### removeMetaClassRegistryChangeEventListener

    void removeMetaClassRegistryChangeEventListener(MetaClassRegistryChangeEventListener listener)
    Removes a metaclass change listener for constant metaclasses
    Parameters:
      `listener` - - the update listener

  - ### getMetaClassRegistryChangeEventListeners

    MetaClassRegistryChangeEventListener[] getMetaClassRegistryChangeEventListeners()
    Returns all registered class change listener for constant metaclasses.
    Returns:
      an array containing all change listener

  - ### iterator

    Iterator iterator()
    Gets a snapshot of the current constant metaclasses 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 metaclass, then the Iteration might show two metaclasses for the same class.

    Note: This Iterator may not be used with multiple threads.

    Returns:
      Iterator for the constant metaclasses