【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )

简介: 【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )

文章目录

一、使用闭包创建接口对象 ( 接口中有一个函数 )

二、使用闭包创建接口对象 ( 接口中有多个函数 )

三、完整代码示例





一、使用闭包创建接口对象 ( 接口中有一个函数 )


在 Groovy 中 , 声明一个接口 , 接口中定义了 1 11 个抽象函数 ,


interface OnClickListener {
    void onClick()
}


传统创建接口的方法如下 , 创建一个匿名内部类 ;


new OnClickListener() {
    @Override
    void onClick() {
        println "OnClick"
    }
}


使用闭包 , 也可以创建上述接口对象 , 闭包中的内容就是唯一的抽象函数内容 ;


// 使用闭包创建接口对象
OnClickListener listener = {
    println "OnClickListener"
}


调用


listener.onClick()


执行接口函数 , 执行结果如下 :


OnClickListener



代码示例 :


// I. 使用闭包创建接口, 接口中有 1 个函数
interface OnClickListener {
    void onClick()
}
void setOnClickListener (OnClickListener onClickListener) {
    onClickListener.onClick()
}
// 使用闭包创建接口对象
OnClickListener listener = {
    println "OnClickListener"
}
listener.onClick()
setOnClickListener(listener)



执行结果 :


OnClickListener






二、使用闭包创建接口对象 ( 接口中有多个函数 )


如果接口中定义了多个函数 ,


interface OnClickListener2 {
    void onClick()
    void onLongClick()
}


则在创建闭包时 , 在闭包后面添加


as 接口名


代码 , 如下 :


// 使用闭包创建接口对象
OnClickListener2 listener2 = {
    println "OnClickListener2"
} as OnClickListener2


上述方法会默认将接口的多个方法都设置为上述闭包方法 ;


执行接口对象的 onClick 和 onLongClick 方法 , 执行的都是相同的闭包方法 ;


listener2.onClick()
listener2.onLongClick()


上述 2 22 行代码执行结果都打印


OnClickListener2



代码示例 :


interface OnClickListener2 {
    void onClick()
    void onLongClick()
}
void setOnClickListener2 (OnClickListener2 onClickListener) {
    onClickListener.onClick()
}
// 使用闭包创建接口对象
OnClickListener2 listener2 = {
    println "OnClickListener2"
} as OnClickListener2
listener2.onClick()
listener2.onLongClick()
setOnClickListener2(listener2)



执行结果 :


OnClickListener2
OnClickListener2
OnClickListener2





三、完整代码示例


完整代码示例 :


// I. 使用闭包创建接口, 接口中有 1 个函数
interface OnClickListener {
    void onClick()
}
void setOnClickListener (OnClickListener onClickListener) {
    onClickListener.onClick()
}
// 使用闭包创建接口对象
OnClickListener listener = {
    println "OnClickListener"
}
listener.onClick()
setOnClickListener(listener)
// II. 使用闭包创建接口, 接口中有多个函数
interface OnClickListener2 {
    void onClick()
    void onLongClick()
}
void setOnClickListener2 (OnClickListener2 onClickListener) {
    onClickListener.onClick()
}
// 使用闭包创建接口对象
OnClickListener2 listener2 = {
    println "OnClickListener2"
} as OnClickListener2
listener2.onClick()
listener2.onLongClick()
setOnClickListener2(listener2)


执行结果 :


OnClickListener
OnClickListener
OnClickListener2
OnClickListener2
OnClickListener2


image.png

目录
相关文章
|
JSON JavaScript 开发工具
对象和接口-2:常见用法
本实验将介绍TypeScript中的对象类型的常见用法
对象和接口-2:常见用法
|
Java 编译器
第8篇:学习 Java 中的方法(方法的定义、可变参数、参数的传递问题、方法重载、方法签名)通过官方教程
原始参数(eg:int 或 double)通过 value 传递给方法。这意味着对参数值的任何更改仅存在于该方法的作用域内。当方法返回后,栈帧销毁后,参数消失后,对它们的任何更改都将无效。
232 0
第8篇:学习 Java 中的方法(方法的定义、可变参数、参数的传递问题、方法重载、方法签名)通过官方教程
|
Java
Java中的方法的概念及无参、带参、带返回值方法定义和调用
方法的概念及无参、带参、带返回值方法定义和调用的简单示例
237 0
【错误记录】Groovy 扩展方法调用报错 ( 静态扩展方法 或 实例扩展方法 需要分别配置 | 没有配置调用会报错 groovy.lang.MissingMethodException )
【错误记录】Groovy 扩展方法调用报错 ( 静态扩展方法 或 实例扩展方法 需要分别配置 | 没有配置调用会报错 groovy.lang.MissingMethodException )
599 0
【错误记录】Groovy 扩展方法调用报错 ( 静态扩展方法 或 实例扩展方法 需要分别配置 | 没有配置调用会报错 groovy.lang.MissingMethodException )
【Groovy】Groovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )
【Groovy】Groovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )
400 0
【Groovy】Groovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )
【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )
【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )
212 0
【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 实现 GroovyInterceptable 接口 | 重写 invokeMethod 方法 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 实现 GroovyInterceptable 接口 | 重写 invokeMethod 方法 )
177 0
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 实现 GroovyInterceptable 接口 | 重写 invokeMethod 方法 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 通过 MetaClass#invokeMethod 方法调用类其它方法 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 通过 MetaClass#invokeMethod 方法调用类其它方法 )
171 0
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 通过 MetaClass#invokeMethod 方法调用类其它方法 )
【错误记录】Groovy 闭包使用报错 ( 闭包中不能直接使用外部对象的方法 | 需要先设置 delegate 代理 )
【错误记录】Groovy 闭包使用报错 ( 闭包中不能直接使用外部对象的方法 | 需要先设置 delegate 代理 )
224 0
【错误记录】Groovy 闭包使用报错 ( 闭包中不能直接使用外部对象的方法 | 需要先设置 delegate 代理 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )
202 0
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )