Kotlin Lambda 闭包语法

Java 中的 Lambda 语法

至于什么时候可以在 Java 中使用 Lambda ,具体可以参见 是时候了解 Lambda 表达式具体写法了

代码示例

public static void main(String[] args) {
    Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
				System.out.println("Lambda");
            }
        });
        
    thread.start();
}

在 Java 8 开始支持 Lambda 表达式,以上代码可以使用如下方式表示:

Thread thread = new Thread(() -> {
       System.out.println("Lambda");
});

如果方法体中只有一行代码,即run() 方法 中只有一行代码,那么有更加简便的写法(省略了"{}"):

Thread thread = new Thread(() -> System.out.println("Lambda"));

Kotlin 的 Lambda 语法

val thread = Thread({ -> println("kotlin") })
thread.start()

很明显 Kotlin 中 Lambda 语法与 Java 中 Lambda 的不同点:
Java 中的"->" 符号在花括号 "{}"的外边,而 Kotlin 在里面。

同时,Kotlin 中可以多余的冗余信息:

  • 当无任何参数时,可以省略箭头符号"->":
val thread = Thread({println("kotlin") })
thread.start()
  • 如果 Lambda 是函数的最后一个参数,可以将大括号放在小括号的外边:
val thread3 = Thread(){ println("kotlin")}
  • 如果函数只有一个参数,且这个参数是 Lambda,则可以省略小括号:
val thread3 = Thread{ println("kotlin")}

Kotlin 中 Lambda 闭包

闭包声明

val echo = { name: String ->
	println(name)
}

闭包声明

fun main(args: Array<String>){
	echo.invoke("Kotlin")
	echo(kotlin)
}

Lambda 在编译后会被编译成匿名内部对象:

public final class TestKt {
   @NotNull
   private static final Function1 echo;

   @NotNull
   public static final Function1 getEcho() {
      return echo;
   }

   public static final void main(@NotNull String[] args) {
      Intrinsics.checkParameterIsNotNull(args, "args");
      echo.invoke("kotlin");
      echo.invoke("kotlind");
   }
   static {
      echo = (Function1)null.INSTANCE;
   }
}

Kotlin Lambda 参数是有上限,为 22 ,可以自定义 Java 接口扩展参数个数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值