从Groovy1.1beta-2开始,实现动态改变对象的能力变的十分简单:
一开始,我们有这样一个类:
class Person {
String name
}
该类的实例都是哑巴,不能说话,作为造物主的我们该完善它们,使它们能自我介绍(添加实例方法):class Person {
String name
}
// 添加自我介绍的行为
Person.metaClass.introduce << {println "I'm $name"}
现在让我们看看,它们到底是否真的能够开口自我介绍了呢:
class Person {
String name
}
// 添加自我介绍的行为
Person.metaClass.introduce << {println "I'm $name"}
def person = new Person(name:"山风小子")
person.introduce()
运行结果:
I'm 山风小子
嗯~人类改造成功~
但人应该有性别吧,嗯~对的,加个性别属性sex(添加属性):
class Person {
String name
}
// 添加自我介绍的行为
Person.metaClass.introduce << {println "I'm $name"}
// 添加性别属性,默认为男(Male)
Person.metaClass.sex = "Male"
def person = new Person(name:"山风小子")
person.introduce()
println person.sex
运行结果:
I'm 山风小子
Male
时间: 2024-10-10 14:40:21