Adding Methods to an Instance
Normally when you add a
MetaMethod, it is added for all instances of that class. However, you can dynamically add methods to individual instances by giving that instance its own
For Groovy version 1.6 and higher - any Groovy or Java object
For Groovy prior to version 1.6 -
Note that you cannot do this:
because you must call
emc.initialize() before making any method calls on the instance. But you can't add MetaMethods after calling
initialize()! This is bit of a catch 22 because the ExpandoMetaClass is intercepting methods to itself. The solution is (as shown in the first example) to simply add the MetaMethods before assigning the new MetaClass to your instance.
The other option is to set the set
emc.allowChangesAfterInit = true. This will allow you to add additional methods on the MetaClass after it is in use.
Be sure to use the proper constructor,
Only works in Groovy 1.1-beta-3 and above. Use the Proxy class in older versions to achieve a per-instance behaviour change.
If your Instance is not a GroovyObject
If your instance is a plain Java type, it will not implement
GroovyObject, and consequently, will not have a
metaClass property. In this case you must wrap your instance in a groovy.util.Proxy:
Note that this example is calling the
setMetaClass(..) method rather than using the property notation in the previous example. This is because
Proxy intercepts method calls only, not property access.