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

  • 相关阅读:
    Dos.ORM logo.Net轻量级开源ORM框架 Dos.ORM
    C# FUNC 应用
    WCF教程网址
    C#扩展方法实现 byte[] 输出为HEX字符串形式
    apache配置,禁止指定后缀访问
    IServerChannelSinkProvider
    在服务器端的远程对象中加上抽象工厂的接口和实现类
    pannel加载窗体
    权限框架
    工作周记
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/5719217.html
Copyright © 2011-2022 走看看