【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

目录
相关文章
|
Java
一个类的两个接口有同名函数,JAVA如何调用
一个类的两个接口有同名函数,JAVA如何调用
104 0
|
Java
Java中的方法的概念及无参、带参、带返回值方法定义和调用
方法的概念及无参、带参、带返回值方法定义和调用的简单示例
228 0
Java中的方法的概念及无参、带参、带返回值方法定义和调用
【错误记录】Groovy 扩展方法调用报错 ( 静态扩展方法 或 实例扩展方法 需要分别配置 | 没有配置调用会报错 groovy.lang.MissingMethodException )
【错误记录】Groovy 扩展方法调用报错 ( 静态扩展方法 或 实例扩展方法 需要分别配置 | 没有配置调用会报错 groovy.lang.MissingMethodException )
576 0
【错误记录】Groovy 扩展方法调用报错 ( 静态扩展方法 或 实例扩展方法 需要分别配置 | 没有配置调用会报错 groovy.lang.MissingMethodException )
【Groovy】Groovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )
【Groovy】Groovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )
386 0
【Groovy】Groovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )
【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
208 0
【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法实现函数拦截 | 实现函数调用转发 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法实现函数拦截 | 实现函数调用转发 )
151 0
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法实现函数拦截 | 实现函数调用转发 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 通过 MetaClass#invokeMethod 方法调用类其它方法 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 通过 MetaClass#invokeMethod 方法调用类其它方法 )
166 0
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 通过 MetaClass#invokeMethod 方法调用类其它方法 )
【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )
【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )
201 0
【Groovy】Groovy 扩展方法 ( 扩展静态方法示例 | 扩展实例方法示例 | 扩展实例方法与扩展静态方法代码相同 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )
197 0
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 实现 GroovyInterceptable 接口 | 重写 invokeMethod 方法 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 实现 GroovyInterceptable 接口 | 重写 invokeMethod 方法 )
172 0
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 实现 GroovyInterceptable 接口 | 重写 invokeMethod 方法 )