Lambda表达式只是用于实现目标接口的语法糖,这意味着您将通过lambda表达式在接口中实现特定方法。编译器可以推断接口中参数的类型,这就是为什么您不需要在lambda表达式中显式定义它们的原因。
例如:
Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);
在此表达式中,lambda表达式显然实现了
Comparator字符串a,因此,这意味着lambda表达式是用于实现的语法糖
compare(String,String)。
因此,编译器可以安全地假设
s1and 类型
s2为
String。
您的目标接口类型提供了编译器确定lambda参数的实际类型需要的所有信息。
Oracle Corportion的Java语言架构师Briant Goetz发表了一些有关JDK 8
Lambdas正在进行的工作的文章。我相信您的问题的答案在那里:
- 拉姆达州。
- 拉姆达州图书馆版。
- Lambda表达式的翻译
- JVMLS 2012:用Java实现Lambda表达式
第二篇文章介绍了如何在字节码级别实现lambda表达式,并可以帮助您深入研究第二个问题的细节。



