在 Kotlin 中使用 Lambda 表达式实现函数接口
Implementing Function Interface using Lambda Expression in Kotlin
@FunctionalInterface
interface Interf {
fun m1(num: Int)
}
fun main() {
val a: Interf = { 34 -> println("Hello world !!") }
}
编译时出现此错误
Unexpected tokens (use ';' to separate expressions on the same line)
Kotlin lambda 函数语法与 Java Lambda 表达式有点不同吗?
首先,这也不会在 java 中编译:
@FunctionalInterface
interface Interf {
void m1(int num);
}
class Main {
public static void main(String[] args) {
Interf f = 34 -> System.out.println("Hello world !!"); //compilation error here
}
}
同样的错误:
error: ';' expected
Interf f = 34 -> System.out.println("Hello world !!");
^
要使其正确,应更改 lambda 参数的名称,使其成为有效的 java identifier.
例如,这将编译:
Interf f = x -> System.out.println("Hello world !!");
现在,回到 Kotlin。 1.4 版引入了 SAM conversions:
的语法
fun interface Interf {
fun m1(num: Int)
}
它可以被实例化为:
val a = Interf { println("Hello world !!") }
这里保留了 implicitly declared it
parameter 仅引用 lambda 参数的约定。
@FunctionalInterface
interface Interf {
fun m1(num: Int)
}
fun main() {
val a: Interf = { 34 -> println("Hello world !!") }
}
编译时出现此错误
Unexpected tokens (use ';' to separate expressions on the same line)
Kotlin lambda 函数语法与 Java Lambda 表达式有点不同吗?
首先,这也不会在 java 中编译:
@FunctionalInterface
interface Interf {
void m1(int num);
}
class Main {
public static void main(String[] args) {
Interf f = 34 -> System.out.println("Hello world !!"); //compilation error here
}
}
同样的错误:
error: ';' expected
Interf f = 34 -> System.out.println("Hello world !!");
^
要使其正确,应更改 lambda 参数的名称,使其成为有效的 java identifier.
例如,这将编译:
Interf f = x -> System.out.println("Hello world !!");
现在,回到 Kotlin。 1.4 版引入了 SAM conversions:
的语法fun interface Interf {
fun m1(num: Int)
}
它可以被实例化为:
val a = Interf { println("Hello world !!") }
这里保留了 implicitly declared it
parameter 仅引用 lambda 参数的约定。