Groovy 中有多种途径实现向原有类添加方法,具体有如下几种:

  1. MOP(meta object protocol) — 详见 ExpandoMetaClass
  2. 扩展方法 — GDK采用的此方法
  3. Category 注解 — 影响范围可控
  4. Mixin

下面看下代码:

/**
 * @author :ZackZhou
 * @date :Created in 2020/10/20 10:27 AM
 * @description :如何向已有的类中添加新的方法
 * @modified By:
 * @version:
 */

//MetaClass
String.metaClass.Say = { String words ->
    println delegate + words
}

"Hello ".Say("World")

//使用Category
@Category(String)
class SayAgain{
    //必须是方法,不能是closure
    def SayWhat(String words)  {
        println delegate + words
    }
}

use(SayAgain){
    "Hello ".SayWhat("World")
}

// Mixin
class NewMethodProvider{
    def SaySomething = { words ->
        println delegate + words
    }
}

String.mixin(NewMethodProvider)

"Hello ".SaySomething("World")

//添加扩展方法,GDK中使用的就是此方法,DGM -- DefaultGroovyMethods
/*
* 步骤:
*   1. 创建自己的类
*   2. 在 META-INFO/services 文件句柄里面加入 此类的全路径, 如下:
*       moduleName=regina-marshal
        moduleVersion=1.0
        extensionClasses=regina.Marshal
        staticExtensionClasses=
*   3. 将此项目打成jar
*   4. 使用者引入此jar 即可
* */


//建议使用优先级:  category class > meta class > mixin

 

版权声明:本文为FsharpZack原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/FsharpZack/p/13845373.html