编译器可以通过上下文推断lambda表达式的数据类型。以下是一个代码示例:
import java.util.ArrayList;
import java.util.List;
public class CompilerExample {
public static void main(String[] args) {
List names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
// 使用lambda表达式对列表进行排序
names.sort((String a, String b) -> a.compareTo(b));
// 打印排序后的列表
for (String name : names) {
System.out.println(name);
}
}
}
在上面的示例中,编译器根据names.sort()
方法的参数要求,推断出lambda表达式的数据类型为(String a, String b) -> a.compareTo(b)
。编译器会根据该推断,检查lambda表达式是否与Comparator
接口中的compare
方法的参数类型匹配。
注意,如果lambda表达式的参数类型是明确的,可以省略参数类型的声明。例如,上面的示例可以简化为:
names.sort((a, b) -> a.compareTo(b));
编译器会根据names
列表的泛型类型推断出lambda表达式的参数类型为String
。