Groovy高效编程——动态改变对象的能力

http://tech.ddvip.com   2008年01月22日    社区交流

内容摘要:从Groovy1.1beta-2开始,实现动态改变对象的能力变的十分简单。而从Groovy1.1beta-3开始,Groovy的动态性有了进一步的增强。

  运行结果:

  I'm 山风小子, Male

  I'm 山风小子, Female

  I'm 山风小子, Male

  为了方便实例化Person,添加一个构造方法(添加构造方法):

class Person {
String name
}
// 添加自我介绍的行为
Person.metaClass.introduce << {println "I'm $name"}
// 添加性别属性,默认为男(Male)
Person.metaClass.sex = "Male"
// 修改之前自我介绍行为,添加性别说明
Person.metaClass.introduce << {println "I'm $name, $sex"}
def person = new Person(name:"山风小子")
person.introduce()
// 做变性手术,变为女的(Female)
person.sex = "Female"
person.introduce()
// 工厂方法,造人方便点
Person.metaClass.'static'.createPerson = { name, sex ->
Person p = new Person()
p.name = name
p.sex = sex
return p
}
def bluesun = Person.createPerson("山风小子", "Male")
bluesun.introduce()
// 方便实例化Person,添加一个构造方法
Person.metaClass.constructor << { name, sex ->
new Person(name:name, sex:sex)
}
def daniel = new Person("Daniel", "Male")
daniel.introduce()

  运行结果:

  I'm 山风小子, Male

  I'm 山风小子, Female

  I'm 山风小子, Male

  I'm Daniel, Male

  最后,引用一个官方例子swapCase来展示一下Groovy是如何增强既有类的能力的(演示如何使用delegate,注意演示的是final类:String)

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

正在加载评论...