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

Author:
  John Wilson, Graeme Rocher, Jochen Theodorou
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(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 Details

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