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

举报
韩曙亮 发表于 2022/01/11 00:08:04 2022/01/11
1.2k+ 0 0
【摘要】 文章目录 一、使用闭包创建接口对象 ( 接口中有一个函数 )二、使用闭包创建接口对象 ( 接口中有多个函数 )三、完整代码示例 一、使用闭包创建接口对象 ( 接口中有一个函数...





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



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

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 2 2 行代码执行结果都打印

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

  
 

在这里插入图片描述

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/122294051

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。