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回答

bennyhuo

2019-09-22

两种语言的 Lambda 本质上描述的是一个东西,即匿名函数类型。

但毕竟是不同的语言,Lambda 的实现细节上还是有差异的,例如 Kotlin 的 Lambda 是有真实的类型的,而 Java 的 Lambda 目前还更像是一个语法糖,换个角度,Kotlin 的 Lambda 描述的就是函数本身,因为函数本身就是一个类型,而 Java 当中没有函数类型,因此 Java 的 Lambda 目前仍然只能是 SAM 转换。

0
0

Android首选开发语言Kotlin入门与进阶

Google I/O大会钦定Android一级开发语言,现在不学,等待何时

3122 学习 · 387 问题

查看课程