Groovy中如何向已有的类添加新方法
Groovy 中有多种途径实现向原有类添加方法,具体有如下几种:
- MOP(meta object protocol) -- 详见 ExpandoMetaClass
- 扩展方法 -- GDK采用的此方法
- Category 注解 -- 影响范围可控
- 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
Groovy中如何向已有的类添加新方法的更多相关文章
- C#中的扩展方法(向已有类添加方法,但无需创建新的派生类型)
C#中的扩展方法 扩展方法使你能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...
- runtime-给系统已有类添加属性
在没有接触runtime之前,我们接触到的能给类进行扩展的方法有类目(category)和延展(extension)两种.类目(category)可以给系统已有类添加扩展方法但是不能添加属性,并且被添 ...
- phpcms如何给已有的模块添加新功能?
phpcms如何给已有的模块添加新功能? 方法一:直接在模块里的控制器文件中添加功能. 不建议使用此方法,因为一旦phpcms升级,有可能会覆盖模块中的文件, 导致你添加的功能丢失. 方法二:新建一个 ...
- RegisterUserFunc为测试对象添加新方法或重写已有方法
QTP中为了提高扩展性,提供了一个为测试对象添加一个新的自定义方法,或者重写测试对象已有的方法的函数RegisterUserFunc,在此给大家分享一下. RegisterUserFunc:为测试对象 ...
- 在C#中我们能调用一个类的私有方法吗
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在C#中我们能调用一个类的私有方法吗.
- C#中WinFrom保存文件SaveFileDialog类的使用方法
C#中WinFrom保存文件SaveFileDialog类的使用方法 使用的命名空间是:System.Windows.Forms; 常用属性: Title:保存对话框的标题,默认为"另存 ...
- spring AOP Bean添加新方法
目的:为studentAdditionalDetails中添加Student的showDetails()和ExtraShowDetails()两个方法 spring 中AOP能够为现有的方法添加额外 ...
- MVC中为自动生成实体类添加验证
将额外的基于特性的元数据(象验证特性)施加到由VS设计器自动生成/维护的类的一个方法是,采用一个我们称之为“伙伴类(buddy classes)”的技术. 基本上来说,你创建另外一个类,包含你的验证特 ...
- ASP.NET MVC系列:为已有模型添加新的属性
在模型类Movie中添加一个新的属性Rating
随机推荐
- JavaGuide易错点总结
基础知识易错点 1. object.equals("str") 容易报空指针异常,应使用"str".equals(object); 还可以使用JDK7引入的工具 ...
- js-正则表达式的初步应用(一)
一.正则表达式是使用单个字符串来描述.匹配一系列符合某个句法规则的字符串搜索模式.注:搜索模式也可用于文本替换 例子1 输出结果 注:(我为了方便在控制台输出,所以结果如下) 例子2 输出结果 上面 ...
- Linux实战(19):Shell交互式read 用法
read 用法有好几种,我在实战过程中用到了 -p,记一笔以防不用忘记了. 实例 #!/bin/bash echo "检测IP是否被占用" while read -p " ...
- linux学习(十)linux安装MySQL
一.前言 由于我使用的是阿里云的服务器,后面会加入配置阿里云的部分,非阿里云的linux系统可以省略后面的步骤,根据自己系统的情况进行配置~ PS:我安装的是mysql5.7.24的版本,其他版本的M ...
- Apache CXF基本使用
一.服务端开发 1.创建web项目 2.导入jar包 3.web.xml中配置Servlet 1 <!-- 配置CXF框架提供的Servlet --> 2 <servlet> ...
- 04 sublime text 3在线安装package control插件,之后安装主题插件和ConvertToUTF8 插件
前提:需要@@科学@@上网 在线安装包通常都需要@@科学@@上网 安装package control插件 在线安装package control插件 按ctrl+shift+p 输入install,选 ...
- 001 win10下安装linux子系统--Ubuntu及其图形界面
首次启动图形界面关键步骤及相关命令: 步骤: 打开Xlunch 打开XLaunch,选择:"one large window",Display number设置成0,其它默认即可, ...
- Java (一)下载APACHE Commons IO
一,进入APACHE的官网,在首页往下找APACHE PROJECT LIST > Commons,点击进入. 二,进入Apache Commons页面,找IO组件,点击进入. 三.点击链接Do ...
- P3118 [USACO15JAN]Moovie Mooving G
P3118 [USACO15JAN]Moovie Mooving G Link 题目描述 Bessie is out at the movies. Being mischievous as alway ...
- Centos最小化安装后,不能使用yum命令的解决办法
刚刚最小化方式安装了CentOS 7 后,想查看一下config,却发现没有config文件,就想用yum下载一个,但是发现yum不能正常工作!!! 一,输入安装X Window命令,安装出错!! 在 ...