日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 同时注入普通方法、静态方法、构造方法 )

發(fā)布時間:2025/6/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 同时注入普通方法、静态方法、构造方法 ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、同時注入普通方法、靜態(tài)方法、構造方法
  • 二、完整代碼示例





一、同時注入普通方法、靜態(tài)方法、構造方法



如果要同時為 Groovy 類注入大量方法 , 使用 Category 分類MetaClass 將每個方法逐個注入 , 這樣操作比較繁瑣 ;

同時為 Groovy 類注入多個方法 , 可以使用 metaClass 方法實現(xiàn) , 該函數(shù)的原型如下 :

public static MetaClass metaClass(Class self, Closure closure) {MetaClassRegistry metaClassRegistry = GroovySystem.getMetaClassRegistry();MetaClass mc = metaClassRegistry.getMetaClass(self);if (mc instanceof ExpandoMetaClass) {((ExpandoMetaClass)mc).define(closure);return mc;} else if (mc instanceof DelegatingMetaClass && ((DelegatingMetaClass)mc).getAdaptee() instanceof ExpandoMetaClass) {((ExpandoMetaClass)((DelegatingMetaClass)mc).getAdaptee()).define(closure);return mc;} else if (mc instanceof DelegatingMetaClass && ((DelegatingMetaClass)mc).getAdaptee().getClass() == MetaClassImpl.class) {ExpandoMetaClass emc = new ExpandoMetaClass(self, false, true);emc.initialize();emc.define(closure);((DelegatingMetaClass)mc).setAdaptee(emc);return mc;} else if (mc.getClass() == MetaClassImpl.class) {MetaClass mc = new ExpandoMetaClass(self, false, true);mc.initialize();((ExpandoMetaClass)mc).define(closure);metaClassRegistry.setMetaClass(self, mc);return mc;} else {throw new GroovyRuntimeException("Can't add methods to custom meta class " + mc);}}

使用規(guī)則如下 :

類名.mateClass {// 注入普通方法普通方法名 = {閉包}// 注入靜態(tài)方法'static' {靜態(tài)方法名 = {閉包}}// 注入構造方法constructor = {構造方法參數(shù)列表 ->構造方法內容要返回的實例對象} }

為下面的 Student 類 , 同時注入 普通方法、靜態(tài)方法、構造方法 ;

class Student {def name; }

注入方法如下 :

// 注入多個類型的方法 Student.metaClass {// 注入普通方法hello = {println "Hello ${delegate.name}"}// 注入普通方法say = {println "My name is ${delegate.name}"}// 注入靜態(tài)方法'static' {fun = {println "Class Type : ${delegate}"}}// 注入構造方法constructor = {String str ->new Student(name: str)} }



二、完整代碼示例



完整代碼示例 :

class Student {def name; }// 注入多個類型的方法 Student.metaClass {// 注入普通方法hello = {println "Hello ${delegate.name}"}// 注入普通方法say = {println "My name is ${delegate.name}"}// 注入靜態(tài)方法'static' {fun = {println "Class Type : ${delegate}"}}// 注入構造方法constructor = {String str ->new Student(name: str)} }// 調用注入的靜態(tài)方法 Student.fun()// 使用注入的構造方法初始化 Student 類 def student = new Student("Tom")// 調用注入的普通方法 student.hello() student.say()

執(zhí)行結果 :

Class Type : class Student Hello Tom My name is Tom

《新程序員》:云原生和全面數(shù)字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 同时注入普通方法、静态方法、构造方法 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。