Groovy高效编程动态改变对象的能力节能
2020-10-07 合山装修公司
从Groovy1.1beta-2开始,实现动态改变对象的能力变的十分简单:
一开始,我们有这样一个类:
class Person {
String name
}
该类的实例都是哑巴,不能说话,作为造物主的我们该完善它们,使它们能自我介绍(添加实例方法): class Person {
S在《玩具总动员3》中的重逢让他意识到自己深爱芭比。肯目前正在纽约参加时装周tring name
}// 添加自我介绍的行为
roduce {println "I'm $name"}
现在让我们看看,它们到底是否真的能够开口自我介绍了呢:
class Person {
String name
} // 添加自我介绍的行为
roduce {println "I'm $name"}
def person = new Person(name:"山风小子")
roduce()
运行结果:
I'm 山风小子
嗯~人类改造成功~
但人应该有性别吧,嗯~对的,加个性别属性sex(添加属性):
class Person {
String name
}// 添加自我介绍的行为
roduce {println "I'm $name"}
// 添加性别属性,默认为男(Male)
x = "Male"
def person = new Person(name:"山风小子")
roduce()
println x
运行结果:
I'm 山风小子
Male
但做男人累啊~为了买房,娶妻拼命赚钱,做女人算了,做变性手术:
class Person {
String name
}// 添加自我介绍的行为
roduce {println "I'm $name"}
// 添加性别属性,默认为男(Male)
x = "Male"
def person = new Person(name:"山风小子")
roduce()
println x
// 做变性手术,变为女的(Female)
x = "Female"
println x
运行结果:
I'm 山风小子
Male
Female
作为造物主的我们考虑到手术的风险性,为了让其他人知道自己现在是个女的,在介绍中添加性别说明:
class Person {
String name
}// 添加自我介绍的行为
roduce {println "I'm $name"}
// 添加性别属性,默认为男(Male)
x = "Male"
// 修改之前自我介绍行为,添加性别说明
roduce {println "I'm $name, $sex"}
def person = new Person(name:"山风小子")
roduce()
// 做变性手术,变为女的(Female)
x = "Female"
roduce()
运行结果:
I'm 山风小子, Male
I'm 山风小子, Female
为了造人方便点,搞个工厂方法(添加类方法,即静态方法):
class Person {
String name
}
// 添加自我介绍的行为
roduce {println "I'm $name"}
// 添加性别属性,默认为男(Male)
x = "Male"
// 修改之前自我介绍行为,添加性别说明
roduce {println "I'm $name, $sex"}
def person = new Person(name:"山风小子")
roduce()
// 做变性手术,变为女的(Female)
x = "Female"
roduce()
// 工厂方法,造人方便点
taClass.'static'.createPerson = { name, sex -
Person p = new Person()
= name
x = sex
return p
}
def bluesun = eatePerson("山风小子", "Male")
roduce()
运行结果:
I'm 山风小子, Male
I'm 山风小子, Female
I'm 山风小子, Male
为了方便实例化Person,添加一个构造方法(添加构造方法):
class Person {
String name
}
// 添加自我介绍的行为
roduce {println "I'm $name"}
// 添加性别属性,默认为男(Male)
x = "Male"
// 修改之前自我介绍行为,添加性别说明
roduce {println "I'm $name, $sex"}
def person = new Person(name:"山风小子")
roduce()
// 做变性手术,变为女的(Female)
x = "Female"
roduce()
// 工厂方法,造人方便点
taClass.'static'.createPerson = { name, sex -
Person p = new Person()
= name
x = sex
return p
}
def bluesun = eatePerson("山风小子", "Male")
roduce()
// 方便实例化Person,添加一个构造方法
nstructor { name, sex -
new Person(name:name, sex:sex)
}
def daniel = new Person("Daniel", "Male")
roduce()
运行结果:
I'm 山风小子, Male
I'm 山风小子, Female
<阿里巴巴的全球化步伐p>I'm 山风小子, MaleI'm Daniel, Male
最后,引用一个官方例子swapCase来展示一下Groovy是如何增强既有类的能力的(演示如何使用delegate,注意演示的是final类:String)
apCase = {-
def sb = new StringBuffer()
// delegate与this类似,引用当前正被‘改造’的对象
ch {
sb (UpperCase(it as char) ? LowerCase(it as char) :
UpperCase(it as char))
}
String()
}String s = "Hello, world!"
println apCase()
运行结果:
hELLO, WORLD!
用于添加方法(如果方法已经存在,会发生oovyRuntimeException异常),=用于添加方法或覆盖既有方法
开利空调移机大约多少钱婴儿肚脐贴的危害银川白癜风专科
-
-
海南公租房新办法解决夹心层住房难题搭配
海南公租房新办法解决夹心层住房难题海南中低收入群体、新毕业大学生、新...
- 家居风水 2020-06-06
-
海南公租房新办法解决夹心层住房难题搭配
-
-
核查拉响橙色警报冰冻房企千亿融资冲动搭配
核查拉响“橙色警报”冰冻房企千亿融资冲动去年10月起在地产圈内流传的一...
- 家居风水 2020-06-06
-
核查拉响橙色警报冰冻房企千亿融资冲动搭配
-
-
房地产企业发债融资开展普通商品房建设方案搭配
房地产企业发债融资开展普通商品房建设方案出台在资金使用途径方面,发债...
- 家居风水 2020-06-02
-
房地产企业发债融资开展普通商品房建设方案搭配
-
-
曝诺维茨基已参加数次球队合练啥时候能复出搭配
曝诺维茨基已参加数次球队合练 啥时候能复出?诺维茨基北京时间11月21日消息...
- 家居风水 2020-06-01
-
曝诺维茨基已参加数次球队合练啥时候能复出搭配
-
-
完胜却暴露一环节弱势发球榜单队内最高仅第搭配
完胜却暴露一环节弱势 发球榜单队内最高仅第位中国女排虽完胜泰国却暴露...
- 家居风水 2020-06-01
-
完胜却暴露一环节弱势发球榜单队内最高仅第搭配
-
-
开发商急发高息债外资行收紧楼市拐点真来了搭配
开发商急发高息债外资行收紧 楼市拐点真来了A股市场遭遇“黑色星期一&...
- 家居风水 2020-05-27
-
开发商急发高息债外资行收紧楼市拐点真来了搭配