从Groovy1.1开始,你可以使用一种被称为ExpandoMetaClass(可扩展元类)的特殊元类,并通过一种简洁的闭包语法动态地添加方法、构造器、属性和静态方法。
它是怎样工作的?每一个java.lang.Class都提供了一个特殊的“metaClass”属性,当你使用它的时候,就能获得一个ExpandoMetaClass实例的引用。
举例来说,要获得Java类java.lang.String的ExpandoMetaClass,你可以这样做:
String.metaClass.swapCase = {-> def sb = new StringBuffer() delegate.each { sb << (Character.isUpperCase(it as char) ? Character.toLowerCase(it as char) : Character.toUpperCase(it as char)) } sb.toString() }
这将为String类添加一个名为swapCase的方法。
注意:默认情况下,通过ExpandoMetaClass添加的方法并不能被继承1),但如果你想那么做的话,你必须在你的应用程序运行之前(比如main方法中或者servlet启动时)调用ExpandoMetaClass.enableGlobally()。
深入阅读: