Groovy中如何向已有的類添加新方法

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

 

Tags: