Groovy高效编程——动态改变对象的能力
http://tech.ddvip.com 2008年01月22日 社区交流
内容摘要:从Groovy1.1beta-2开始,实现动态改变对象的能力变的十分简单。而从Groovy1.1beta-3开始,Groovy的动态性有了进一步的增强。
I'm Daniel
She is Annie
Daniel
使用methodMissing方法来处理对那些不存在的方法的调用
class Person {
String name
public Person(name) {
this.name = name
}
def introduce() {
println "I'm $name"
}
def introduce(String name) {
println "She is $name"
}
}
Person.metaClass.methodMissing = { name, args ->
// 动态添加方法
Person.metaClass."$name" = { methodArgs ->
if ("hello".equals(name))
println "$methodArgs"
else {
def argList = Arrays.asList(methodArgs)
println "No method $name with ${argList*.class}"
}
}
delegate."$name"(args)
}
def daniel = new Person('Daniel')
daniel.hello("Leona")
daniel.hi("Annie", "Leona")
运行结果:
{"Leona"}
No method hi with [class java.lang.String, class java.lang.String]
类似地,使用propertyMissing方法来处理对那些不存在的属性的引用
class Person {
String name
public Person(name) {
this.name = name
}
def introduce() {
println "I'm $name"
}
def introduce(String name) {
println "She is $name"
}
}
Person.metaClass.propertyMissing = { String name, value ->
// 动态添加属性
Person.metaClass."$name" = value
}
def daniel = new Person('Daniel')
daniel.sex = 'Male'
println daniel.sex
运行结果:
Male
作者:山风小子 责编:豆豆技术应用