什么是类型推断?Lambda表达式是否支持类型推断?代码举例讲解

类型推断是编译器自动推断出类型的能力。Lambda 表达式支持类型推断,这使得 Lambda 表达式的语法变得更加简洁。

我们以几个例子来说明 Lambda 表达式的类型推断:

  1. 根据上下文推断
    例如:
List<String> list = new ArrayList<>();  
list.forEach(s -> System.out.println(s));

这里编译器根据上下文(forEach() 方法的参数类型)推断出 s 的类型为 String。

  1. 根据函数式接口的抽象方法的参数推断
    例如:
Predicate<Integer> predicate = (x) -> x > 0; 

这里编译器根据 Predicate 接口的抽象方法的参数类型推断出 x 的类型为 Integer。

  1. 根据函数式接口的抽象方法的返回值推断
    例如:
Function<Integer, String> function = (x) -> x.toString(); 

这里编译器根据 Function 接口的抽象方法的返回值 String 推断出 x.toString() 的类型也为 String。

  1. 根据变量的初始化值推断
    例如:
var list = new ArrayList<String>(); 
list.forEach(s -> System.out.println(s)); 

这里使用 var 关键字,编译器根据 list 的初始化类型 ArrayList 推断出 s 的类型为 String。