实战 Groovy: 使用闭包、ExpandoMetaClass 和类别进行元编程
2009-11-19 00:00:00 来源:WEB开发网但是有关类别的最有趣的一点是它们的实现方式。EMC 需要使用闭包,这意味着您只能在 Groovy 中实现它们。由于类别仅仅是包含静态方法的类,因此可以用 Java 代码进行定义。事实上,可以在 Groovy 中重用现有的 Java 类 — 对元编程来说总是含义不明的类。
清单 16 演示了使用来自 Jakarta Commons Lang 包的类进行元编程。org.apache.commons.lang.StringUtils 中的所有方法都一致地遵守 Category 模式 — 静态方法接受 String 作为第一个参数。这意味着可以使用现成的 StringUtils 类作为 Category。
清单 16. 使用 Java 类进行元编程import org.apache.commons.lang.StringUtils
class CommonsTest extends GroovyTestCase{
void testStringUtils(){
def word = "Introduction"
word.metaClass.whisper = {->
delegate.toLowerCase()
}
use(StringUtils, StringHelper){
//from org.apache.commons.lang.StringUtils
assertEquals "Intro...", word.abbreviate(8)
//from the StringHelper Category
assertEquals "INTRODUCTION", word.shout()
//from the word.metaClass
assertEquals "introduction", word.whisper()
}
}
}
class StringHelper{
static String shout(String self){
return self.toUpperCase()
}
}
更多精彩
赞助商链接