Ada*_*dam 0 java lambda type-inference java-11
Java 11 引入了 lambda 参数的局部变量类型推断。例如:
Stream.of("a", "b", "c").map((var a) -> "ok")
Run Code Online (Sandbox Code Playgroud)
我的问题是:如果我可以跳过它,为什么要使用它。例如:
Stream.of("a", "b", "c").map(a -> "ok")
Run Code Online (Sandbox Code Playgroud)
?
JEP 323规定了以下目标:
- 将隐式类型 lambda 表达式中的形式参数声明的语法与局部变量声明的语法对齐。
它指出了动机:
lambda 表达式可以是隐式类型的,其中所有形式参数的类型都会被推断出来:
Run Code Online (Sandbox Code Playgroud)(x, y) -> x.process(y) // implicitly typed lambda expressionJava SE 10 使局部变量可以使用隐式类型:
Run Code Online (Sandbox Code Playgroud)var x = new Foo(); for (var x : xs) { ... } try (var x = ...) { ... } catch ...为了与局部变量保持一致,我们希望允许使用“var”作为隐式类型 lambda 表达式的形式参数:
Run Code Online (Sandbox Code Playgroud)(var x, var y) -> x.process(y) // implicit typed lambda expression一致性的好处之一是修饰符(尤其是注释)可以应用于局部变量和 lambda 形式而不失简洁:
Run Code Online (Sandbox Code Playgroud)@Nonnull var x = new Foo(); (@Nonnull var x, @Nullable var y) -> x.process(y)
如果可以跳过它,您应该使用它吗?
可能在某些情况下您需要使用它(如果您工作的项目具有强制使用的严格编码约定)。在其他情况下,它可能是基于意见的。
我的具体意见是:如果你不需要它,就不要使用它。