文章目录

  • 一、使用闭包创建接口对象 ( 接口中有一个函数 )
  • 二、使用闭包创建接口对象 ( 接口中有多个函数 )
  • 三、完整代码示例

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


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

interface OnClickListener {void onClick()
}

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

new OnClickListener() {@Overridevoid 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()

上述 222 行代码执行结果都打印

OnClickListener2

代码示例 :

interface OnClickListener2 {void onClick()void onLongClick()
}void setOnClickListener2 (OnClickListener2 onClickListener) {onClickListener.onClick()
}// 使用闭包创建接口对象
OnClickListener2 listener2 = {println "OnClickListener2"
} as OnClickListener2listener2.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 OnClickListener2listener2.onClick()
listener2.onLongClick()setOnClickListener2(listener2)

执行结果 :

OnClickListener
OnClickListener
OnClickListener2
OnClickListener2
OnClickListener2

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

  1. 【设计模式】代理模式 ( 动态代理使用流程 | 创建目标对象 | 创建被代理对象 | 创建调用处理程序 | 动态创建代理对象 | 动态代理调用 )

    文章目录 前言 一.静态代理的弊端 二.动态代理的优势 三.动态代理使用流程 1.目标对象接口 2.被代理对象 3.调用处理程序 4.客户端 四.动态生成 代理对象 类 的 字节码 文件数据 前言 代 ...

  2. 便携式液晶驱动板卡方案可支持1080P能驱动 HBR 4LANE EDP 接口的液晶面板有一个 miniHDMI 接口,两个 Type-C 信号接口。支持 HDR 高动态。

    AP2KS REV1.1 是一款多功能便携式液晶显示器驱动板卡,可支持最高分辨率 2560*1600@60Hz, 能驱动 HBR 4LANE EDP 接口的液晶面板. 拥有一个 miniHDMI 接口 ...

  3. 【错误记录】Groovy 扩展方法调用报错 ( 静态扩展方法 或 实例扩展方法 需要分别配置 | 没有配置调用会报错 groovy.lang.MissingMethodException )

    文章目录 一.报错信息 二.解决方案 一.报错信息 定义 Thread 扩展方法 , 下面的扩展方法 class ThreadExt {public static Thread hello(Threa ...

  4. java接口自动化demo_第一个java 接口自动化程序

    第一个Java实现的接口测试 御都 字数 1065 · 阅读 0 2019-04-09 08:14 一.背景 使用HttpClient框架提交一个post&get申请,并对打印出返回值和状态码 ...

  5. android studio 跨进程,Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用...

    本文首发于微信公众号「后厂技术官」 在上一篇文章Android IPC机制(二)用Messenger进行进程间通信中我们介绍了使用Messenger来进行进程间通信的方法,但是我们能发现Messeng ...

  6. ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。

    DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...

  7. es6 迭代器(遍历器)Iterator 自定义遍历器 lterator/简单模拟values方法 for of运行机制 Array/Set/Map默认迭代器接口 对象设置迭代器

    文章目录 迭代器 Iterator 用处 (需要自定义遍历数据的时候) 自定义 遍历器 lterator 简单模拟values方法 Array Set Map 默认迭代器接口 entries valu ...

  8. 【BUG】@Transactional注解在同类方法调用中不生效

    后台代码 今天做系统开发的时候,遇到了一个BUG:@Transactional注解在同类方法调用中不生效 代码如下: /*** @description: 快递100接口服务类* @date 2021 ...

  9. 【SSH】——Struts2中的动态方法调用(一)

    首先我们来看一个简单的调用: 1.在web.xml中配置拦截器StrutsPrepareAndExecuteFilter.StrutsPrepareAndExecuteFilter实现了filter接 ...

最新文章

  1. 3MIN干完一周的工作量?快来看看应该如何部署 Kubernetes!
  2. 如何打开.etl文件?
  3. Jupyter Notebook 入门指南
  4. Android游戏开发系统控件-Dialog
  5. 手机长曝光怎么设置_摄影教程丨手机如何拍摄长曝光照片,流光快门,星空银河搞起来!...
  6. OpenCV3学习(12.2) 目标跟踪之运动模板法segmentMotion实现(Mat版本)
  7. ggplot2分面柱状图柱子比例一致_R语言柱状图
  8. 拓端tecdat|R语言计量经济学与有时间序列模式的机器学习预测
  9. 安卓手机当电脑摄像头(DroidCam网盘及使用方法)
  10. CCFCSP 201803-2碰撞的小球
  11. android手机系统怎么刷机包,安卓系统怎么刷机?安卓系统手机通用刷机教程
  12. NOIP2019数字游戏
  13. 小牛电动车能跑多快、多远?一起来了解一下
  14. Pycharm 教育版下载/安装 无需注册破解
  15. pygame初探:复刻小游戏《Flappy Bird》
  16. 给儿子的一封信——大学才是人生真正的起点
  17. linux 内存清理/释放命令
  18. 8款最好用的固定资产管理软件
  19. manjaro pacman glibc 2.33 not fount
  20. howler.js音频控制js库

热门文章

  1. 如何确定一个IAR工程所使用的IAR版本
  2. Qt下的OpenGL 编程(3)绘制平面几何体
  3. albian开发笔记五--谈缓存同步
  4. ShopEx安装过程
  5. Struts2中五个重要的常量
  6. JSON API免费接口
  7. node安装升级过程中遇到的问题汇总
  8. oracle rac scan ip 用途 原理
  9. BZOJ1192: [HNOI2006]鬼谷子的钱袋
  10. Yii中缓存依赖的处理