实战 Groovy: 使用闭包、ExpandoMetaClass 和类别进行元编程
2009-11-19 00:00:00 来源:WEB开发网虽然 EMC 允许您动态定义新行为,然而 Category 允许您将行为保存到独立的类文件中。这意味着您可以在不同的情况下使用它:单元测试、生产代码,等等。定义单独类的开销在重用性方面获得了回报。
清单 15 演示了对同一个 use 块同时使用 StringHelper 和新创建的 FileHelper:
清单 15. 在 use 块中使用多个类别class MetaTest extends GroovyTestCase{
void testFileWithCategory(){
File f = new File("iDoNotExist.txt")
use(FileHelper, StringHelper){
assertTrue f.exists()
assertTrue f.isFile()
assertEquals "/opt/some/dir/iDoNotExist.txt", f.absolutePath
assertTrue f.text.startsWith("This is")
assertTrue f.text.shout().startsWith("THIS IS")
}
assertFalse f.exists()
shouldFail(java.io.FileNotFoundException){
f.text
}
}
}
class StringHelper{
static String shout(String self){
return self.toUpperCase()
}
}
class FileHelper{
static boolean exists(File f){
return true
}
static String getAbsolutePath(File f){
return "/opt/some/dir/${f.name}"
}
static boolean isFile(File f){
return true
}
static String getText(File f){
return "This is the text of my file."
}
}
更多精彩
赞助商链接