Java 11:Lambda参数的局部变量语法(Local Variable Syntax for Lambda Parameters)

原文:Java 11 Local Variable Syntax for Lambda Parameters

1. 介绍

Lambda参数的局部变量语法是Java 11引入的唯一个语言特性。本文我们将一起探索这个新特性。

2. Lambda参数的局部变量语法

Java 10引入的一个关键特性之一为局部变量类型推断:Java 10 LocalVariable Type-Inference,允许用var作为局部变量的类型。编译器根据分配给变量的值推断类型。
然而,我们并不能在lambda表达式上应用这个特性。比如,我们明确声明两个参数的类型:

(String s1, String s2) -> s1 + s2

我们可以省略参数的类型,重新写一下这个lambda:

(s1, s2) -> s1 + s2

Java8是支持这种写法的。Java 10逻辑扩展为:

(var s1, var s2) -> s1 + s2

但Java 10并不支持这种写法。

Java 11支持上述所有语法。这使得var在局部变量和lambda参数中的使用是一致的。

3. 优点

如果lambda能省略掉参数类型,为什么还要用var呢?
其中一个好处就是修饰符可以应用于局部变量和lambda表达式,而不会失去简洁性。
比如,常见的一个修饰符:类型注解:

(@Nonnull var s1, @Nullable var s2) -> s1 + s2

这样我们可以不用特别声明类型就可以使用注解。

4.局限

在lambda中使用var也有一些局限性。
比如,1、不能一个参数用var,一个参数省略类型:

// 错误❌
(var s1, s2) -> s1 + s2

2、不能将特定的类型和var混合使用:

// 错误❌
(var s1, String s2) -> s1 + s2

3、一个参数的lambda表达式,省略参数的话我们可以不用括号:

s1 -> s1.toUpperCase()

用var的话不能省略括号:

// 错误❌
var s1 -> s1.toUpperCase()

以上3种用法会导致编译错误。

5. 总结

本文我们探索了Java11的一个新特性:如何用Lambda参数的局部变量语法

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值