科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Groovy高效编程——动态改变对象的能力

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

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

作者:山风小子 来源:蛟龍居 2007年11月18日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

而从Groovy1.1beta-3开始,Groovy的动态性有了进一步的增强:

我们可以通过respondsTo和hasProperty方法来判断是否存在某个方法和某个属性:

class Person {
String name

public Person(name) {
this.name = name
}

def introduce() {
println "I'm $name"
}

def introduce(String name) {
println "She is $name"
}
}

def daniel = new Person('Daniel')

// 判断实例daniel是否有方法introduce()
if (daniel.metaClass.respondsTo(daniel, 'introduce')) {
daniel.introduce()
}

// 判断实例daniel是否有方法introduce(String)
if (daniel.metaClass.respondsTo(daniel, 'introduce', String)) {
daniel.introduce('Annie')
}

// 判断实例daniel是否有属性name
if (daniel.metaClass.hasProperty(daniel, 'name')) {
println daniel.name
}

运行结果:
I'm Daniel
She is Annie
Daniel


使用methodMissing方法来处理对那些不存在的方法的调用

class Person {
String name

public Person(name) {
this.name = name
}

def introduce() {
println "I'm $name"
}

def introduce(String name) {
println "She is $name"
}
}

Person.metaClass.methodMissing = { name, args ->
// 动态添加方法
Person.metaClass."$name" = { methodArgs ->
if ("hello".equals(name))
println "$methodArgs"
else {
def argList = Arrays.asList(methodArgs)
println "No method $name with ${argList*.class}"
}
}

delegate."$name"(args)
}

def daniel = new Person('Daniel')

daniel.hello("Leona")
daniel.hi("Annie", "Leona")

运行结果:
{"Leona"}
No method hi with [class java.lang.String, class java.lang.String]


类似地,使用propertyMissing方法来处理对那些不存在的属性的引用

class Person {
String name

public Person(name) {
this.name = name
}

def introduce() {
println "I'm $name"
}

def introduce(String name) {
println "She is $name"
}
}

Person.metaClass.propertyMissing = { String name, value ->
// 动态添加属性
Person.metaClass."$name" = value
}

def daniel = new Person('Daniel')
daniel.sex = 'Male'
println daniel.sex

运行结果:
Male

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章