转载

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
正文到此结束
Loading...