在了解重载解析前,需要我们先对两个概念有一定的理解;
目标类型:利用lambda表达式所在上下文所期待的类型进行推导的类型。
lambda表达式只能出现在目标类型为函数式接口的上下文中。
高阶函数:指接受另外一个函数作为参数,或返回一个函数的函数。
判断:如果函数的参数列表里包含函数接口,或该函数返回一个函数接口,那么该函数就是高阶函数。
示例:<R> Stream<R> map(Function<? super T, ? extends R> mapper);
重载解析:
Lambda表达式作为参数时,其类型由它的目标类型推导得出;
推导过程遵循如下规则:
1. 如果只有一个可能的目标类型,由相应函数接口里的参数类型推导得出;
2. 如果有多个可能的目标类型,由最具体的类型推导得出;
3. 如果有多个可能的目标类型且最具体的类型不明确,则需人为指定类型;
错误示例: