Java Lambda类型推断
2018-03-13 10:28 更新
Java Lambda类型推断
lambda表达式表示函数接口的实例。
根据上下文,一个lambda表达式可以映射到不同的函数接口类型。
编译器推断lambda表达式的类型。
例子
在下面的代码中有两个函数接口, Processor 和SecondProcessor。
Processor 有一个名为 getStringLength 的方法,它接受一个字符串作为参数,并返回 int 。
SecondProcessor 有一个名为 noName 的方法,它接受一个字符串作为参数,并返回一个 int 。
从代码中,我们可以看到,我们可以为它们分配两个相同的lambda表达式。
public class Main {
public static void main(String[] argv) {
Processor stringProcessor = (String str) -> str.length();
SecondProcessor secondProcessor = (String str) -> str.length();
//stringProcessor = secondProcessor; //compile error
String name = "Java Lambda";
int length = stringProcessor.getStringLength(name);
System.out.println(length);
}
}
@FunctionalInterface
interface Processor {
int getStringLength(String str);
}
@FunctionalInterface
interface SecondProcessor {
int noName(String str);
}
上面的代码生成以下结果。

注意
Processor 或 SecondProcessor 称为目标类型。
推断lambda表达式类型的过程称为目标类型。
编译器使用以下规则来确定lambda表达式是否可分配给其目标类型:
- 它必须是一个函数接口。
- lambda表达式的参数必须与函数接口中的抽象方法匹配。
- lambda表达式的返回类型与函数接口中抽象方法的返回类型兼容。
- 从lambda表达式抛出的检查异常必须与函数接口中抽象方法的已声明的throws子句兼容。
以上内容是否对您有帮助:

免费 AI IDE


更多建议: