为什么Java Lambda类型推理只处理具有唯一参数的方法?

为什么Java Lambda类型推理只处理具有唯一参数的方法?,lambda,java-8,inference,functional-interface,Lambda,Java 8,Inference,Functional Interface,如果编译器只需要一个参数就可以计算出方法的类型,那么为什么它不能对具有两个或多个参数的方法进行同样的计算呢 这里有一个例子: 另一方面,为什么编译器不能找出str是一个字符串(在unique方法中的第一个参数,以及str2是一个字符串(在unique方法中的第二个参数))您似乎没有正确定义它: (str, str2) -> str.length() 您还应该收到第二个示例的编译时错误。(str,str2)->str.length()?它可以,处理器stringProcessor=(st

如果编译器只需要一个参数就可以计算出方法的类型,那么为什么它不能对具有两个或多个参数的方法进行同样的计算呢

这里有一个例子:


另一方面,为什么编译器不能找出str是一个字符串(在unique方法中的第一个参数,以及str2是一个字符串(在unique方法中的第二个参数)

您似乎没有正确定义它:

(str, str2) -> str.length()

您还应该收到第二个示例的编译时错误。

(str,str2)->str.length()
?它可以,
处理器stringProcessor=(str1,str2)->str1.length();
使用
str1
str2
作为
字符串正确推断。@Eugene It works:)只有当lambda表达式有一个参数时,才能省略thanksRound括号。JLS在这方面非常清楚。