【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如何调用
79 0
|
Java
Java中的方法的概念及无参、带参、带返回值方法定义和调用
方法的概念及无参、带参、带返回值方法定义和调用的简单示例
182 0
Java中的方法的概念及无参、带参、带返回值方法定义和调用
【错误记录】Groovy 扩展方法调用报错 ( 静态扩展方法 或 实例扩展方法 需要分别配置 | 没有配置调用会报错 groovy.lang.MissingMethodException )
【错误记录】Groovy 扩展方法调用报错 ( 静态扩展方法 或 实例扩展方法 需要分别配置 | 没有配置调用会报错 groovy.lang.MissingMethodException )
455 0
【错误记录】Groovy 扩展方法调用报错 ( 静态扩展方法 或 实例扩展方法 需要分别配置 | 没有配置调用会报错 groovy.lang.MissingMethodException )
【Groovy】Groovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )
【Groovy】Groovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )
319 0
【Groovy】Groovy 方法调用 ( Groovy 构造函数中为成员赋值 | Groovy 函数的参数传递与键值对参数 | 完整代码示例 )
【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
185 0
【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
【错误记录】Groovy 闭包使用报错 ( 闭包中不能直接使用外部对象的方法 | 需要先设置 delegate 代理 )
【错误记录】Groovy 闭包使用报错 ( 闭包中不能直接使用外部对象的方法 | 需要先设置 delegate 代理 )
182 0
【错误记录】Groovy 闭包使用报错 ( 闭包中不能直接使用外部对象的方法 | 需要先设置 delegate 代理 )
【Groovy】闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )
【Groovy】闭包 Closure ( 闭包中调用 Groovy 脚本中的方法 | owner 与 delegate 区别 | 闭包中调用对象中的方法 )
180 0
|
Java
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法拦截 JDK 中已经定义的函数 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法拦截 JDK 中已经定义的函数 )
117 0
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法实现函数拦截 | 实现函数调用转发 )
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法实现函数拦截 | 实现函数调用转发 )
127 0
【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法实现函数拦截 | 实现函数调用转发 )
【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 正常方法调用 | 方法委托实现 | 代码示例 )
【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 正常方法调用 | 方法委托实现 | 代码示例 )
114 0
【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 正常方法调用 | 方法委托实现 | 代码示例 )