Groovy的元编程

Groovy的元编程

在Groovy中,如果你的对象使用了一个它不曾定义过的方法,不会报错,至少编译的时候不会报错,这就是因为Groovy特殊的运行时机制。

如下:
在这里插入图片描述
你调用了一个对象的方法,他会先去检查这个类里面是否定义了这个属性和方法。如果没有的话会去MeteClass中去寻找,别担心没有这个类,在Java中所有的类都会集成Object,而在Groovy中,所有的类都会继承GroovyObject,这个类里面就有获取MeteClass的方法:
在这里插入图片描述
这样,就可以在运行中去动态的给对象添加属性和方法,甚至是静态的。

def p = new Person(name:"YangHang",age:0)

p.eat()

p.metaClass.sex = '男'
p.metaClass.drink = {
    -> println "喜欢喝饮料"
}
p.metaClass.static.play = {
    -> println "喜欢玩游戏"
}

println "${p.name},今年${p.age}岁了,性別是${p.sex}"
p.drink()
p.play()

如果MeteClass中也没有定义这个方法的话,就要去依次去寻找实体类里面是否实现了methodMissing和invokeMethod方法了,在这两个方法里面可以做特殊的处理。

package object

class Person {

    String name
    int age

    def eat() {
        println "${name} 在吃饭"
    }

    @Override
    Object invokeMethod(String name, Object args) {
        println "${name}方法不存在"
    }
}

发布了156 篇原创文章 · 获赞 19 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qq_36929361/article/details/104242492