Java中的SAM

Java8之后,我们将只有单一方法的接口称为SAM(Single Abstract Method)接口,Java8通过Lambda可以大大简化对于SAM接口的调用。没有引入Lambda之前,我们是这样调用SamType的:

interface JavaInterface {String doSomething(Item item);
}String delegateWork(JavaInterface f) {return f.doSomething(item);
}void doWork() {delegateWork(new JavaInterface() {@Overridepublic String doSomething(Item item) {return "Item = " + item;}});
}

我们需要实现一个JavaInterface的匿名内部类对象,即使只有一个方法,也要规规矩矩地对方法进行声明。但在Java8之后,我们可以使用Lambda简化对SamType的调用进行简化:

@FunctionalInterface
interface JavaInterface {String doSomething(Item item);
}String delegateWork(JavaInterface f) {return f.doSomething(item);
}void doWork() {delegateWork(item -> "Item = " + item);
}

我们将上述借助Lambda对SamType调用的优化称为SAM转换(Single Abstract Method Conversions)

Kotlin兼容Java中的SAM转换

我们在Kotlin中使用在Java中定义的delegateWork方法时,SAM转换同样有效:

//java:定义delegateWork
String delegateWork(JavaInterface f) {return f.doSomething(item);
}
//kt:调用delegateWork
delegateWork { "Print $it" }

Kotlin将Java的SamType翻译成了lambda,因此在kotlin的同名方法实际变成了一个高阶函数:

String delegateWork(JavaInterface f)

   转换为

Kotlin的SAM转换相关推荐

  1. Kotlin极简教程:第10章 Kotlin与Java互操作

    Kotlin is 100% interoperable with Java™ and Android™ 在前面的章节中,我们已经学习了Kotlin的基础语法.类型系统.泛型与集合类.面向对象与函数式 ...

  2. java kotlin相互调用_Kotlin的互操作——Kotlin与Java互相调用

    原标题:Kotlin的互操作--Kotlin与Java互相调用 互操作就是在Kotlin中可以调用其他编程语言的接口,只要它们开放了接口,Kotlin就可以调用其成员属性和成员方法,这是其他编程语言所 ...

  3. ios12完美深色模式插件_看了微信的暗黑模式后,我也适配了一波安卓!

    作者:Zhujiang, 本文经作者授权发布,链接:https://juejin.im/post/5e95633951882573c2192501 前言 第一次听到暗黑模式的时候,感觉好酷啊,听着就好 ...

  4. Kotlin 越来越牛逼了!学Java都我想转了!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 在过 ...

  5. kotlin 用协程做网络请求_中国电信营业厅: 感受 Kotlin 的 quot;加速度quot;

    "我们手上是一个很成熟的项目,所以毫无疑问需要保留 Java 代码,目前只会在新开发的页面中使用 Kotlin,并已经感受到了它带来的便利.随着功能的迭代,我们相信更多的功能会转而使用 Ko ...

  6. Kotlin学习笔记 第二章 类与对象 第三节接口 第四节 函数式接口

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  7. 从 Java 替代品到打造完整生态,Kotlin 10 岁了!

    作者 | 张红月 出品 | CSDN(ID:CSDNnews) 近日,JetBrains 官博发文庆祝 Kotlin 十岁了,并制作纪念网站和视频来庆贺这一关键时刻. 2011 年 7 月 19 日, ...

  8. 申通回应被京东“封杀”;Kotlin 1.4.0 发布 | 极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 国内要闻 字节跳动全资收购才云科技,相关业务及团队并入火山引 ...

  9. kotlin基本语法

    函数 表达式:fun 方法名(参数名1: 数据类型, 参数名2: 数据类型): 返回值数据类型{ } 普通用法 fun test(a: Int): String {return "" ...

  10. Kotlin 1.4 和未来值得期待的地方

    对于企业来说,目前的Android开发面临着许多挑战,尤其是选择哪种技术用于开发最好的Android应用程序. Kotlin和Java是用于Android应用程序开发的两种编程语言,即使是有技术背景的 ...

最新文章

  1. 项目: 打字母游戏【c++/c】
  2. Xpath string()提取多个子节点中的文本
  3. 计算机专业学的东西其实很少,为什么计算机专业的学生要学习使用Linux系统?...
  4. C#编译器对泛型方法调用作类型推断的奇怪问题
  5. 用条件注释判断浏览器版本,解决兼容问题
  6. 181112每日一句
  7. Android 解决表情面板和软键盘切换时跳闪的问题
  8. 雾霾颗粒物携带了什么,从何而来?微生物组测序告诉您!
  9. ISE14.7从程序设计到下载
  10. 【SCI\EI】SCI分区,该看JCR还是中科院?
  11. .rgb格式文件的Python读取、格式转换
  12. ftp服务器端口修改,FTP端口:默认为21端口
  13. 使用ssh远程重装centos
  14. springboot绑定邮箱激活发邮件
  15. FIT/WeFIT 开发者冯华君采访
  16. Node.js结合Express框架项目搭建
  17. 在线文件不落地转base64
  18. 测试新人到测试专家的进阶之路
  19. 前端JS请求网络图片报错GET https://xxx.png 404 (Not Found)的解决办法
  20. html标签lang=“en“解读

热门文章

  1. APARNET阿帕网
  2. 航空摄影与正射摄影的区别
  3. python发邮件被认定为垃圾邮件_Python:脚本发送的邮件被Gmail标记为垃圾邮件
  4. EPON+EOC 大批量设备网管解决方案
  5. 电源防反接电路 供电自动切换电路 - MOS管体二极管的应用
  6. 二维矩形件排样算法之最低水平线搜索算法实现
  7. 1988年图灵奖--伊万·萨瑟兰简介
  8. 【摘抄】每一位测试必备保健技能
  9. 商汤科技Java面试题(含答案)
  10. matlab求系统根轨迹代码_怎么学习经典控制(结合MATLAB)