Java 11 Lambda 中的变量

Java 11 允许在 lambda 表达式中使用 var 并且可以将修饰符应用于局部变量。

(@NonNull var value1, @Nullable var value2) -> value1 + value2

考虑下面的示例

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@interface NonNull {}

public class APITester {
   public static void main(String[] args) {        
      List<String> tutorialsList = Arrays.asList("Java", "HTML");

      String tutorials = tutorialsList.stream()
         .map((@NonNull var tutorial) -> tutorial.toUpperCase())
         .collect(Collectors.joining(", "));

      System.out.println(tutorials);
   }
}

上述代码运行结果如下

Java
HTML

限制

在 lambda 表达式中使用 var 有一定的限制。

  • var 参数不能与其他参数混合使用。 以下将引发编译错误。
    (var v1, v2) -> v1 + v2
    
  • var 参数不能与其他类型的参数混合。 以下将引发编译错误。
    (var v1, String v2) -> v1 + v2
    
  • var 参数只能与括号一起使用。 以下将引发编译错误。
    var v1 -> v1.toLowerCase()
    

查看笔记

扫码一下
查看教程更方便