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

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比起来略麻烦了呀,就不放源码了,想要源码的兄弟可以评论一下。

猜你喜欢

转载自blog.csdn.net/a568478312/article/details/79893744