当前位置: 首页 > news >正文

Kotlin 函数式接口

文章目录

  • 定义
  • 实例化
  • Kotlin 调用 Java 单抽象方法接口

定义

在 Kotlin 中,如果一个接口只有一个抽象方法(其他抽象成员数量不限),可以写成类似函数的形式。

fun interface Editable {// 此处 abstract 可省略abstract fun edit()
}

实例化

正常情况下,我们实例化接口需要用到匿名对象object {}

fun main() {val editable = object : Editable {override fun edit() {print("编辑中...")}}editable.edit()
}
编辑中...

而定义了函数式接口后,我们可以这样做:

fun main() {val editable = Editable { print("编辑中...")}
}

Kotlin 调用 Java 单抽象方法接口

(不知道 Java 是什么可以跳过)
在 Java 中的Runnable接口中只定义了一个抽象方法run,这样的 Java 单抽象方法接口在 Kotlin 中是可以像调用函数式接口fun interface一样调用的(Kotlin 的接口则必须在定义时interface前加fun才行):

// Runnable.java
@FunctionalInterface
public interface Runnable {/*** Runs this operation.*/void run();
}

如果使用 Java 实例化该接口,需要这样写:

public class Test {public static void main(String[] args) {// 这是实例化的位置new Runnable() {@Overridepublic void run() {System.out.print("Run");}};}
}

而使用 Kotlin 是这样写的:

fun main() {object : Runnable {override fun run() {print("Run")}}
}

使用函数式接口调用的写法后,它又是这样的:

fun main() {Runnable {print("Run")}
}

该学谁不用我说了吧。

相关文章:

  • Leetcode:无重复字符的最长子串
  • 数据结构-堆排序问题
  • Android 按上/下键,焦点会移动到第一个控件上面或最后一个控件下面的解决办法
  • VirtualBox7.x下载安装CentOS7安装网络配置
  • AI盒子在智慧加油站的应用
  • 数据结构学习笔记
  • 代码随想录算法训练营第36期DAY45
  • 自然语言处理中的BERT模型深度剖析
  • 基于 Apache Doris 的实时/离线一体化架构,赋能中国联通 5G 全连接工厂解决方案
  • 31-ESP32-S3-WIFI篇-02 Event Group (事件标记组)
  • c语言是编程软件还是编程语言?深入解析C语言的本质与定位
  • 【C语言】基于C语言实现的贪吃蛇游戏
  • 【VSCode】快捷方式log去掉分号
  • 修改ModelLink在RTX3090完成预训练、微调、推理、评估以及TRT-LLM转换、推理、性能测试
  • el-date-picker的使用,及解决切换type时面板样式错乱问题
  • [LeetCode] Wiggle Sort
  • 【Linux系统编程】快速查找errno错误码信息
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2017年终总结、随想
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • ES6 学习笔记(一)let,const和解构赋值
  • Just for fun——迅速写完快速排序
  • Lsb图片隐写
  • Mac转Windows的拯救指南
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • PAT A1092
  • Shell编程
  • Twitter赢在开放,三年创造奇迹
  • 阿里云应用高可用服务公测发布
  • 记一次删除Git记录中的大文件的过程
  • 将 Measurements 和 Units 应用到物理学
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 数组大概知多少
  • 微信小程序开发问题汇总
  • 物联网链路协议
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 硬币翻转问题,区间操作
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 通过调用文摘列表API获取文摘
  • ‌[AI问答] Auto-sklearn‌ 与 scikit-learn 区别
  • # centos7下FFmpeg环境部署记录
  • #宝哥教你#查看jquery绑定的事件函数
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (ZT)一个美国文科博士的YardLife
  • (补)B+树一些思想
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三)mysql_MYSQL(三)
  • (三)终结任务