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

  • 相关阅读:
    第二高的薪水
    leecode 删除排序数组中的重复项
    leecode 17. 电话号码的字母组合
    dubbo 限流之TpsLimitFilter
    G1总结
    leecode 3. 无重复字符的最长子串
    mysql是如何解决脏读、不可重复读、幻读?
    归并排序
    PostgreSQL管理数据库安全
    Oracle Database 19c 技术架构(三)
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/5719217.html
Copyright © 2011-2022 走看看