Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )

【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )

作者头像
韩曙亮
发布于 2023-03-30 02:21:49
发布于 2023-03-30 02:21:49
4.8K00
代码可运行
举报
运行总次数:0
代码可运行

文章目录

一、Java 中函数参数是接口类型


Android 中经常使用如下形式的接口 :

定义一个 OnClickListener 接口 ,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface OnClickListener {
    void onClick()
}

将 OnClickListener 接口对象 作为函数参数 , 传递到函数中 ,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void setOnClickListener (OnClickListener onClickListener) {
    onClickListener.onClick()
}

然后调用上述函数 , 传递一个 OnClickListener 的匿名内部类 ,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setOnClickListener(new OnClickListener() {
    @Override
    void onClick() {
        println "OnClick"
    }
})

执行结果为 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
OnClick

二、函数参数是接口类型 可以 直接传递闭包


如果 setOnClickListener 函数参数接收的是

个接口 , 接口中只有

个方法 , 那么可以直接向 setOnClickListener 方法中传递一个闭包 , 该闭包相当于 OnClickListener 接口中的 onClick 方法 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface OnClickListener {
    void onClick()
}

void setOnClickListener (OnClickListener onClickListener) {
    onClickListener.onClick()
}

setOnClickListener{
    println "OnClick2"
}

执行结果 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
OnClick2

三、完整代码示例


完整代码示例 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface OnClickListener {
    void onClick()
}

void setOnClickListener (OnClickListener onClickListener) {
    onClickListener.onClick()
}

// 正常参数调用
setOnClickListener(new OnClickListener() {
    @Override
    void onClick() {
        println "OnClick"
    }
})

// 传递一个闭包到 setOnClickListener 方法中
setOnClickListener{
    println "OnClick2"
}

执行结果 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
OnClick
OnClick2
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[Android Gradle] 搞定Groovy闭包这一篇就够了
做Android开发的同学,对Gradle肯定不陌生,我们用它配置、构建工程,可能还会开发插件来促进我们的开发,我们必须了解Gradle,而不仅限于只会当配置构建工具,我想学习它,于是就有了这一系列的文章。
Android技术干货分享
2019/03/27
1.4K0
[Android Gradle] 搞定Groovy闭包这一篇就够了
Java 8:一文掌握 Lambda 表达式
能够使用 Lambda 表达式的一个重要依据是必须有相应的函数接口。所谓函数接口,是指内部有且仅有一个抽象方法的接口。
淡定的蜗牛
2019/11/08
5740
Java 8:一文掌握 Lambda 表达式
Android 开发者如何函数式编程 (三)
原文地址:Functional Programming for Android Developers — Part 3 原文作者:Anup Cowkur 译文出自:掘金翻译计划 本文永久链接:gith
Android 开发者
2018/05/31
1.3K0
这一篇让你彻底搞懂 JAVA内部类
做 Android 的话有时候会将各种 Adapter 直接写在 Activity 中,如:
程序员Leo
2023/08/02
2500
详解 Java 内部类
前言注普通内部类静态内部类匿名内部类局部内部类内部类的嵌套深入理解内部类内部类和多重继承内部类和内存泄露
用户7886150
2021/04/25
6250
JAVA入门学习四
描述:有个这个关键字就是让有包的类对调用者可见,不用写全类名了; 比如我们前面在进行Scanner类示例化的对象来接收用户输入;
全栈工程师修炼指南
2022/09/28
4650
JAVA入门学习四
【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )
执行接口对象的 onClick 和 onLongClick 方法 , 执行的都是相同的闭包方法 ;
韩曙亮
2023/03/30
4.5K0
【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )
【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
在 实例对象后使用 " () " 括号符号 , 表示调用该实例对象的 " call() " 方法 ;
韩曙亮
2023/03/30
5980
【Groovy】闭包 Closure ( 闭包调用 与 call 方法关联 | 接口中定义 call() 方法 | 类中定义 call() 方法 | 代码示例 )
【Kotlin】Kotlin 中使用 Lambda 表达式替代对象表达式原理分析 ( 尾随 Lambda - Trailing Lambda 语法 | 接口对象表达式 = 接口#函数类型对象 )
文章目录 一、尾随 Lambda - Trailing Lambda 语法 二、Kotlin 中使用 Lambda 表达式替代对象表达式原理 1、Lambda 替换对象表达式 2、原理分析 3、示
韩曙亮
2023/03/30
1.4K0
【Kotlin】Kotlin 中使用 Lambda 表达式替代对象表达式原理分析 ( 尾随 Lambda - Trailing Lambda 语法 | 接口对象表达式 = 接口#函数类型对象 )
初探Java8新特性之lambda表达式
Java8带有Lambda表达式的预览版的JDK已经放出来了(地址在最下面),新特性有以下四个:
JoeyBlue
2021/09/07
3640
【Kotlin】函数 ⑨ ( Kotlin 语言中的闭包概念 | Java 语言中函数作为参数的替代方案 )
匿名函数 就是 Lambda 表达式 , 同时也是 闭包 , 三者的是相同的概念 ;
韩曙亮
2023/03/30
1.1K0
【Kotlin】函数 ⑨ ( Kotlin 语言中的闭包概念 | Java 语言中函数作为参数的替代方案 )
21天学习挑战赛之Java面向对象接口
Java 9中新增了带方法体的私有方法,这其实在Java 8中就埋下了伏笔:Java 8允许在接口中定义带方法体的默认方法和静态方法。这样可能就会引发一个问题:当两个默认方法或者静态方法中包含一段相同的代码实现时,程序必然考虑将这段实现代码抽取成一个共性方法,而这个共性方法是不需要让别人使用的,因此用私有给隐藏起来,这就是Java 9增加私有方法的必然性
楠羽
2022/11/18
2760
【Java】23 函数式编程
  当需要启动一个线程去完成任务时,通常会通过java.lang.Runnable接口来定义任务内容,并使用java.lang.Thread类来启动该线程。“一切皆对象”作为指导思想,这种做法没毛病:首先创建一个Runnable接口的匿名内部类对象来指定任务内容,再将其交给一个线程来启动。
Demo_Null
2020/09/28
5490
【Java】23 函数式编程
Java-嵌套接口
嵌套接口可以被称为 inner interface,也可以称为 nested class。
Fisherman渔夫
2020/02/18
2.4K0
【Groovy】闭包 Closure ( 闭包作为函数参数 | 代码示例 )
文章目录 一、闭包作为函数参数 二、闭包作为函数参数代码示例 一、闭包作为函数参数 声明一个 fun 函数 , 可以 将参数声明为 Closure<?> 闭包类型 , 在该函数中 , 执行闭包内容 ;
韩曙亮
2023/03/30
5520
【Groovy】闭包 Closure ( 闭包作为函数参数 | 代码示例 )
Java 基础巩固:内部类的字节码学习和实战使用场景
本文介绍了内部类的概念、特点、使用场景以及Java中的内部类实现机制。内部类可以高效地访问非静态成员变量和调用非静态成员方法,并且可以在编译期间不依赖于外部类的实现。在Java中,内部类实现机制包括匿名内部类、局部内部类、静态内部类和嵌套内部类。
张拭心 shixinzhang
2018/01/05
1.4K0
Java 基础巩固:内部类的字节码学习和实战使用场景
Java8新特性第1章(Lambda表达式)
在介绍Lambda表达式之前,我们先来看只有单个方法的Interface(通常我们称之为回调接口):
张磊BARON
2018/04/12
1.4K0
Java8新特性第1章(Lambda表达式)
java内部类的作用(三)----定义使用回调函数的时候比较便捷---匿名内部类(anonymous)
匿名内部类(anonymous inner calss):将局部内部类的使用再深入一步。假如只创建这个类的一个对象,就不必命名了。这种类被称为匿名内部类。
wust小吴
2019/07/05
1.4K0
java内部类的作用(三)----定义使用回调函数的时候比较便捷---匿名内部类(anonymous)
Java8函数式编程以及Lambda表达式
尽管距离Java8发布已经过去7、8年的时间,但时至今日仍然有许多公司、项目停留在Java7甚至更早的版本。即使已经开始使用Java8的项目,大多数程序员也仍然采用“传统”的编码方式。
用户1148394
2020/03/25
4970
Java8函数式编程以及Lambda表达式
Java高级编程:闭包
闭包本身定义比较抽象,MDN官方上解释是:A closure is the combination of a function and the lexical environment within which that function was declared。中文解释是:闭包是一个函数和该函数被定义时的词法环境的组合。
DioxideCN
2022/09/23
9240
推荐阅读
相关推荐
[Android Gradle] 搞定Groovy闭包这一篇就够了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档