21 元对象协议

1       元对象协议

1.1  什么是元对象协议?

基于Groovy的The Meta-Object Protocol (MOP) ,允许你在运行时,向一个对象里添加属性和方法。使用MOP,你能在运行时向一个已经存在的对象中新增方法和属性。

1.2  调用groovy对象的方法或者访问该groovy对象的属性

一个类中,一个方法被调用或者一个属性被访问,并且该类并没有这个方法或者属性,那么预先定义的方法被调用来处理这个调用。

  • def methodMissing (String name, args) – 调用不存在的方法
  • void setProperty (String property, Object o) – 调用一个属性中的不存在的setter方法
  • Object getProperty (String property) -调用一个属性中的不存在的getter方法

以上预定义的方法,Groovy对象实例有默认的实现,但是Groovy对象能重写这些方法。在运行时,如果一个方法或属性不存在,则Groovy框架会调用以上方法。例如,使用Groovy的builder模式,会假装认为有该方法。

1.3  增加方法和属性

使用.metaclass ,来向一个已经存在的类中新增方法和属性。

package mop

 

class MopTest {

    static main(args) {

       Todo.metaClass.summary = 'Learn MOP'

       Todo.metaClass.done = false

       Todo.metaClass.markAsFinish = {-> done=true}

 

       Todo t = new Todo()

       t.markAsFinish()

       println(t.done);

    }

}

class Todo {}

注意:class Todo {}必须放在class MopTest的后边,否则报错。

输出

true

原文地址:https://www.cnblogs.com/yaoyuan2/p/5719217.html