zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    C/C++编译过程
    Struts2入门01
    NET CORE 微软官方说明链接
    PL/SQL控制语句(二、循环控制语句)
    PL/SQL控制语句(一、分支控制语句)
    PL/SQL数据类型
    PL/SQL变量的作用域和可见性
    PL/SQL变量和类型
    CopyWebpackPlugin 的使用
    flex
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/5719217.html
Copyright © 2011-2022 走看看