Groovy语法学习(三) 扩展方法

本文介绍了如何在Groovy中创建扩展方法,通过一个实际的项目步骤,包括新建Gradle项目、编写Groovy类、创建META-INF清单和打包成jar。通过这个过程,展示了Groovy静态扩展方法的实现细节,并在test.groovy文件中验证了扩展方法的成功应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

groovy为jdk增加了很多扩展方法,让我们更加方便的使用,这里我们就来实现一下自己的扩展方法。首先我们先看一下groovy的扩展方法是如何实现的。

groovy中我们可以这样使用

Thread.start {
    println "start"
}
public static Thread start(Thread self, Closure closure) {
        return createThread(null, false, closure);
    }
private static Thread createThread(String name, boolean daemon, Closure closure) {
        Thread thread = name != null ? new Thread(closure, name) : new Thread(closure);
        if (daemon) thread.setDaemon(true);
        thread.start();
        return thread;
    }

其实和自己调用没什么区别,闭包也是实现了Runnable接口的。
那么我们就明确了,扩展方法无非就是就是在一个类里定义一个静态方法。第一个参数必须是对应的类型。
我开始自己的项目。

在Intellij中,我们新建一个Gradle项目
这里写图片描述
这两个id就随便写了
这里写图片描述

这里我选择的是自己的gradle目录,android studio下载的插件缓存
这里写图片描述
简单的项目结构就是这样了
这里写图片描述
接下来创建一个groovy类

class ThreadExtendMethod {
    static void testExtend(Thread self) {
        println "This is an ThreadExtendMethod"
    }
}

编译获取的class文件
这里写图片描述
接下来我建立META-INF清单,以及classes目录
目录结构,注意清单目录名一定要是manifest.META-INF.service
注意文件名字要对应org.codehaus.groovy.runtime.ExtensionModule
classes目录下把需要的.class文件赋值过来,.class文件在out目录下可以找到。
这里写图片描述
在清单文件里我们配置属性

moduleName=ThreadExtendMethod
moduleVersion=1.0
staticExtensionClasses=ThreadExtendMethod

staticExtensionClasses 是静态扩展方法,extensionClasses是实例的扩展方法,这里可以看自己的选择,我们就选择静态的。跟上自己类名,其他版本,模块名都可以随意写。
准备就绪之后我们就开始生成jar包了
在groovy目录下执行命令: jar -cvf thread.jar -C classes/ . -C manifest/ .
接着就生成了jar包我们把它放在libs目录下
这里写图片描述
导入jar包,在build.gradl中的dependencies中加入 compile fileTree(include: [‘*.jar’], dir: ‘libs’)

这里写图片描述
然后右下角出现的弹框点击import
这里写图片描述
那么jar包就导入了,接下来可以把配置的文件都删除了
ThreadExtendMethod.groovy
classes目录
manifest目录
最后我们把我们测试一下扩展的方法,在随便添加一个文件test.groovy中添加如下代码

Thread.testExtend()

编译运行之后成功打印了日志,说明扩展方法已经建立成功了。

简单配置就可以扩展方法了,不过和kotlin比起来略麻烦了呀,就不放源码了,想要源码的兄弟可以评论一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值