【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )

简介: 【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )

文章目录

一、扩展静态方法示例

二、扩展实例方法示例

三、扩展实例方法与扩展静态方法代码相同





一、扩展静态方法示例


在上一篇博客 【Groovy】Groovy 扩展方法 ( Groovy 扩展方法引入 | 分析 Groovy 中 Thread 类的 start 扩展方法 ) 中 , 分析 Thread 的扩展方法 start 方法 , 该方法调用如下 ,


Thread.start {
}


这个为 Thread 扩展的方法是一个静态方法 ;


 

/**
     * 以给定的闭包作为可运行实例启动线程。
     *
     * @param self    Groovy类别使用的占位符变量;默认静态方法忽略
     * @param closure 可运行的闭包
     * @return 返回已经启动的线程 
     * @since 1.0
     */
    public static Thread start(Thread self, Closure closure) {
        return createThread(null, false, closure);
    }






二、扩展实例方法示例


声明 InputStream 实例对象 , 该实例对象可以调用 getText 扩展方法 ;


InputStream inputStream
inputStream.getText()


image.png

使用 InputStream 类无法调用 getText() 方法 ;


image.png

这说明 为 InputStream 扩展的 getText 方法 , 是一个 实例方法 , 只有实例对象能调用该扩展方法 , 类无法调用该扩展方法 ;



查看为 InputStream 扩展的 getText() 方法的源码 : 该扩展方法是 static 修饰的 ;


 

/**
     * 读取此InputStream的内容并将其作为字符串返回。
     * 流在该方法返回之前关闭。
     *
     * @param is 输入流
     * @return 返回 URL 获取的字符串文本
     * @throws IOException 如果 IO 异常 发生.
     * @since 1.0
     */
    public static String getText(InputStream is) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        return getText(reader);
    }






三、扩展实例方法与扩展静态方法代码相同


这说明 无论为类 扩展 实例方法 , 还是 扩展 静态方法 , 定义的扩展方法都是 static 静态的 ;


真正用于区分 扩展的是 实例方法 还是 静态方法 , 是在 manifest.META-INF.services 目录 中的 org.codehaus.groovy.ExtensionModule 文件 中的不同配置决定的 ;


目录
相关文章
|
4天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
24 0
Java接口中可以定义哪些方法?
|
4天前
|
数据库 Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(下)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)
49 0
|
4天前
|
存储 JavaScript
TypeScript 类的基础:从定义到实例化,让你快速掌握(二)
TypeScript 类的基础:从定义到实例化,让你快速掌握
|
4天前
|
存储 设计模式 JavaScript
TypeScript 类的基础:从定义到实例化,让你快速掌握(三)
TypeScript 类的基础:从定义到实例化,让你快速掌握
|
4天前
|
缓存 JavaScript 前端开发
TypeScript 类的基础:从定义到实例化,让你快速掌握(一)
TypeScript 类的基础:从定义到实例化,让你快速掌握
|
4天前
|
Java
重学JDK8新特性之Lambda、函数式接口、接口新增方法、方法引用
重学JDK8新特性之Lambda、函数式接口、接口新增方法、方法引用
40 0
|
监控 Java 容器
字节码编程,Javassist篇二《定义属性以及创建方法时多种入参和出参类型的使用》
在上一篇 「Helloworld」 中,我们初步尝试使用了 Javassist字节编程的方式,来创建我们的方法体并通过反射调用运行了结果。大致了解到创建在使用字节码编程的时候基本离不开三个核心类;ClassPool、CtClass、CtMethod,它们分别管理着对象容器、类和方法。但是我们还少用一样就是字段;CtFields,在这一章节中我们不止会使用字段,还会创建多个不同入参类型和返回值的学习。
354 0
字节码编程,Javassist篇二《定义属性以及创建方法时多种入参和出参类型的使用》
【错误记录】Groovy 扩展方法调用报错 ( 静态扩展方法 或 实例扩展方法 需要分别配置 | 没有配置调用会报错 groovy.lang.MissingMethodException )
【错误记录】Groovy 扩展方法调用报错 ( 静态扩展方法 或 实例扩展方法 需要分别配置 | 没有配置调用会报错 groovy.lang.MissingMethodException )
460 0
【错误记录】Groovy 扩展方法调用报错 ( 静态扩展方法 或 实例扩展方法 需要分别配置 | 没有配置调用会报错 groovy.lang.MissingMethodException )
【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )
【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )
236 0
【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )
【Groovy】MOP 元对象协议与元编程 ( Groovy 类内部和外部分别获取 metaClass | 分析获取 metaClass 操作的字节码 | HandleMetaClass 注入方法 )
【Groovy】MOP 元对象协议与元编程 ( Groovy 类内部和外部分别获取 metaClass | 分析获取 metaClass 操作的字节码 | HandleMetaClass 注入方法 )
168 0