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