类型推断是编译器自动推断出类型的能力。Lambda 表达式支持类型推断,这使得 Lambda 表达式的语法变得更加简洁。
我们以几个例子来说明 Lambda 表达式的类型推断:
- 根据上下文推断
例如:
List<String> list = new ArrayList<>();
list.forEach(s -> System.out.println(s));
这里编译器根据上下文(forEach() 方法的参数类型)推断出 s 的类型为 String。
- 根据函数式接口的抽象方法的参数推断
例如:
Predicate<Integer> predicate = (x) -> x > 0;
这里编译器根据 Predicate 接口的抽象方法的参数类型推断出 x 的类型为 Integer。
- 根据函数式接口的抽象方法的返回值推断
例如:
Function<Integer, String> function = (x) -> x.toString();
这里编译器根据 Function 接口的抽象方法的返回值 String 推断出 x.toString() 的类型也为 String。
- 根据变量的初始化值推断
例如:
var list = new ArrayList<String>();
list.forEach(s -> System.out.println(s));
这里使用 var 关键字,编译器根据 list 的初始化类型 ArrayList 推断出 s 的类型为 String。