Java转Kotlin:Lambda表达式

  • 普通函数
//Kotlin
fun f1() {
    println("Hello")
}
复制代码

以上是一个省略了函数类型的普通函数,该函数有自己的名字 f1 ,函数类型是 ()->Unit

  • 匿名函数
//Kotlin
val f2 = fun() {
    println("Hello")
}
复制代码

以上赋值号右边是一个没有函数名的 匿名函数 ,可以赋值给变量 f2 ,执行 f2() 或者 f2.invoke() 来调用该匿名函数。

Java转Kotlin:Lambda表达式

与普通函数一样,该匿名函数的函数类型是 ()->Unit

2 Lambda表达式

Lambda表达式本质上是一种更具表现力的***匿名函数***。

2.1 Lambda表达式定义

Java转Kotlin:Lambda表达式

图中Kotlin Lambda表达式的函数类型为 ()->Unit 。Java中没有传入参数 不能 省略括号,Kotlin中 省略括号。

Java转Kotlin:Lambda表达式

Java 8中也新增了Lambda表达式,Java 10中新增了类型推导 var ,但是Java中的Lambda表达式的类型无法进行类型推导,本质上是因为Java中的函数(方法)不是类型,不是“一等公民”。因此需要显示声明类型,一般定义一个 SAM ( Simple Abstract Method )接口来定义这个Lambda表达式的类型。

Java转Kotlin:Lambda表达式

上图Java中的Lambda表达式就是利用了SAM来定义表达式的类型。

在Kotlin中,Lambda表达式的常规定义如下:

//Kotlin
val lambda0: () -> Unit = {
    println("Hello")
}

val lambda1: (Int) -> Unit = {
    println(it)
}

val lambda2: (Int, String) -> Unit = { i: Int, s: String ->
    println("$i $s")
}
复制代码

原文 

https://juejin.im/post/5ebc8baff265da7bb65fc2fd

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Java转Kotlin:Lambda表达式

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址