In Groovy we can add extra functionality to a class with so-called mixins. In the previous blog post we added extra functionality to a class, but we can also apply run-time mixins to an object instance. The syntax is slightly different, because we must use the mixin()
method on the metaClass
property of the object.
class Parrot { static String speak(Message text) { /"$text" Polly wants a cracker!/ } } // Runtime mixin on String object instead of class. String s = 'Groovy is Gr8' s.metaClass.mixin Parrot assert s.speak() == '"Groovy is Gr8" Polly wants a cracker!' String other = 'Groovy and Grails' try { other.speak() } catch (MissingMethodException e) { assert e.message.startsWith('No signature of method: java.lang.String.speak() is applicable for argument types: () values: []') }
Written with Groovy 2.1