java的lambda和kotlin的lambda的区别是什么?
来源:10-2 SAM 转换

qq_夜_71
2019-09-22
kotlin代码
// typealias 只能定义在class外面.
typealias Runnable = () -> Unit
class SamKotlin {
fun addTask(runnable: Runnable) {
}
}
java代码
public void test() {
SamKotlin samKotlin = new SamKotlin();
// 匿名内部类写法
samKotlin.addTask(new Function0<Unit>() {
@Override
public Unit invoke() {
return null;
}
});
// lambda写法
samKotlin.addTask(() -> null);
// 上述两种写法是等价的
}
在java里面,匿名内部类可以直接转换成lambda表达式,两种写法是等价的,这是因为jdk1.8支持的.
在kotlin中lambda表达式更像是一种语法,和jdk没有关系,那么 java的lambda和kotlin的lambda的区别是什么?
写回答
1回答
-
两种语言的 Lambda 本质上描述的是一个东西,即匿名函数类型。
但毕竟是不同的语言,Lambda 的实现细节上还是有差异的,例如 Kotlin 的 Lambda 是有真实的类型的,而 Java 的 Lambda 目前还更像是一个语法糖,换个角度,Kotlin 的 Lambda 描述的就是函数本身,因为函数本身就是一个类型,而 Java 当中没有函数类型,因此 Java 的 Lambda 目前仍然只能是 SAM 转换。
00
相似问题