内容摘要:从Groovy1.1beta-2开始,实现动态改变对象的能力变的十分简单。而从Groovy1.1beta-3开始,Groovy的动态性有了进一步的增强。
I'm 山风小子
Male
Female作为造物主的我们考虑到手术的风险性,为了让其他人知道自己现在是个女的,在介绍中添加性别说明:
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()
运行结果:
I'm 山风小子, Male
I'm 山风小子, Female
为了造人方便点,搞个工厂方法(添加类方法,即静态方法):
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()
作者:山风小子 责编:豆豆技术应用