关于Groovy里面元编程(MetaProgramming)的一点总结
2011-09-03 01:51
281 查看
Groovy的元编程有两种方式,EMC(支持为类的某个实例或所有实例添加动态行为,主要是依托delegate),CATEGORY支持为特定的一些实例动态添加类行为,并且能够很好的集成目前java中存在的工具类方法。具体如以下代码所示:
EMC方式:
// 为所有对象添加动态行为
String.metaClass.shout = {
->
return delegate.toUpperCase()
}
println "Hello MetaProgramming".shout()
// output HELLO METAPROGRAMMING
// 为单个对象添加动态行为
def message="Message"
message.metaClass .shout={
->
delegate.toUpperCase()
}
println message.shout()
// output MESSAGE
CATEGORY:
class MetaTest extends GroovyTestCase{
void testCategory(){
String message = "Hello"
use(StringHelper){
assertEquals "HELLO", message.shout()
assertEquals "GOODBYE", "goodbye".shout()
}
shouldFail{
message.shout()
"foo".shout()
}
}
}
class StringHelper{
static String shout(String self){
return self.toUpperCase()
}
}
EMC方式:
// 为所有对象添加动态行为
String.metaClass.shout = {
->
return delegate.toUpperCase()
}
println "Hello MetaProgramming".shout()
// output HELLO METAPROGRAMMING
// 为单个对象添加动态行为
def message="Message"
message.metaClass .shout={
->
delegate.toUpperCase()
}
println message.shout()
// output MESSAGE
CATEGORY:
class MetaTest extends GroovyTestCase{
void testCategory(){
String message = "Hello"
use(StringHelper){
assertEquals "HELLO", message.shout()
assertEquals "GOODBYE", "goodbye".shout()
}
shouldFail{
message.shout()
"foo".shout()
}
}
}
class StringHelper{
static String shout(String self){
return self.toUpperCase()
}
}
相关文章推荐
- 关于ADO+SQL /Access里面查询日期时间类型语句的一点总结
- 关于JS里面创建对象的一点总结
- 总结一点关于模态对户框的,不断更新~
- C中关于一位数组与指针和二维数组与指针的一点总结
- Asp.net 2.0 关于Header/title/Meta tages/Style操作的一点小技巧
- 关于存储过程编写的一点总结(转)
- 关于cocoa编程模块间协作的一点总结(delegate/T-A/notification/...)
- 关于计算机中小端法和大端法存储的一点总结
- 关于多线程Thread 与 Runnable 的一点总结
- 关于switch的LED指示灯的一点总结
- 关于json的一点总结
- 关于Lua中的一点小总结(主要针对的是C调用Lua)
- 关于php+mysql+nginx配置的一点总结
- 关于linux串口编程的一点总结
- 关于用CSplitterWnd分割View的一点总结
- 关于 Visual Studio 调试 Global 的一点总结
- 关于初学python爬虫的一点问题总结(三)
- 看完了linux书第二章后,关于内存寻址的一点总结
- 关于如何jar的一点总结(转至JR论坛)
- 关于C++里面使用set_union,set_intersection等函数的使用总结