本文是《Java语言新特性漫谈》系列文章中的一篇,该系列文章主要探讨各 Java 版本的语言特性方面的增强更新。
var用于Lambda表达式
在 Java 10 中已经加入了基于 var
声明的局部变量类型推断的能力。
Java 11 对这项能力进行了增强,它允许在 Lambda 表达式中使用 var
声明形参。
1 | List<String> varInLambda = Arrays.asList("Formal parameter", |
有什么用?
上面的代码,不使用 var
声明变量反而更简洁,甚至括号都可以省略。那么,使用 var
声明有什么好处么?
答案是,如果要给形参加注解,那就不得不为其显式声明类型,或者以 var
声明。例如上面的代码如果要校验参数不能为空,则:
1 | import org.jetbrains.annotations.NotNull; |
限制条件
不过,需要注意的是,在 Lambda 表达式中使用 var
声明形参是有限制的,简单的一句话:
要用 var
就所有参数都用,不能混用。
因此,以下形式的混用都是不合法的:
1 | (var x, y) -> x.process(y) |
(完)