Groovy:運行期把方法mixin到對象實例
從Groovy 2.1 開始我們可以在運行期把方法mixin到對象實例。這個mixin和class的mixing用法很不一樣,他需要調用對象實例的metaClass屬性的mixin方法。
class Parrot {
static String speak(String 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: []')
}