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 山风小子, Male

I'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异常),=用于添加方法或覆盖既有方法

开利空调移机大约多少钱
婴儿肚脐贴的危害
银川白癜风专科
为你推荐