WEB开发网
开发学院软件开发Java 实战 Groovy: 使用闭包、ExpandoMetaClass 和类别... 阅读

实战 Groovy: 使用闭包、ExpandoMetaClass 和类别进行元编程

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: 清单 9. 重新定义 toUpperCase() 方法String.metaClass.shout={->returndelegate.toUpperCase()}String.metaClass.toUpperCase={->returndelegate.toLowerCase()


清单 9. 重新定义 toUpperCase() 方法
String.metaClass.shout = {-> 
 return delegate.toUpperCase() 
} 
 
String.metaClass.toUpperCase = {-> 
 return delegate.toLowerCase() 
} 
 
println "Hello MetaProgramming".shout() 
 
 
//output 
hello metaprogramming 

这个操作看上去仍然有些不严谨(甚至有些危险!)。尽管现实中很少需要修改 toUpperCase() 方法的行为,但是想象一下为代码单元测试带来的好处?元编程提供了快速、简单的方法,使潜在的随机行为具有了必然性。比如,清单 10 演示了 Math 类的静态 random() 方法被重写:


清单 10. 重写 Math.random() 方法
println "Before metaprogramming" 
3.times{ 
 println Math.random() 
} 
 
Math.metaClass.static.random = {-> 
 return 0.5 
} 
 
println "After metaprogramming" 
3.times{ 
 println Math.random() 
} 
 
//output 
Before metaprogramming 
0.3452 
0.9412 
0.2932 
After metaprogramming 
0.5 
0.5 
0.5 

现在,想像一下对发出开销较高的 SOAP 调用的类进行单元测试。无需创建接口和去掉整个模拟对象的存根 — 您可以有选择地重写方法并返回一个简单的模拟响应。(您将在下一小节看到使用 Groovy 实现单元测试和模拟的例子)。

Groovy 元编程是一种运行时行为 — 这个行为从程序启动一直持续到程序运行。但是如果希望对元编程进行更多的显示该怎么做(对于编写单元测试尤其重要)?在下一小节,您将了解揭秘元编程的秘密。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:实战 Groovy 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接