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

作者:山风小子    责编:豆豆技术应用

正在加载评论...