Function 如果我们在lambda表达式的函数接口中添加不同的参数类型,会发生什么?

Function 如果我们在lambda表达式的函数接口中添加不同的参数类型,会发生什么?,function,lambda,java-8,functional-interface,Function,Lambda,Java 8,Functional Interface,我正在学习lambda表达式。我遇到了一个可以通过以下代码理解的场景: Function<Integer,String> fn = (String s)->s; 函数fn=(字符串s)->s; 在上面的lambda表达式语句中,我知道函数接受参数并返回上述类型。但是为什么我们在“函数”部分提到参数类型(这里是整数),而参数是在“()”中传递的呢。我知道这是语法的一部分,但我只想了解它可能有用的地方。即使我们传递不同的参数类型(字符串),它也会运行。首先,您编写的函数是错误的

我正在学习lambda表达式。我遇到了一个可以通过以下代码理解的场景:

Function<Integer,String> fn = (String s)->s;
函数fn=(字符串s)->s;

在上面的lambda表达式语句中,我知道函数接受参数并返回上述类型。但是为什么我们在“函数”部分提到参数类型(这里是整数),而参数是在“()”中传递的呢。我知道这是语法的一部分,但我只想了解它可能有用的地方。即使我们传递不同的参数类型(字符串),它也会运行。

首先,您编写的
函数是错误的。应按以下方式进行更正

Function<Integer, String> fn = s -> String.valueOf(s);
函数fn=s->String.valueOf(s);

不能像上面那样声明不同的数据类型,只能声明整数。作为输入参数的任何其他数据类型都会导致编译失败。lambda函数参数的数据类型是可选的,由编译器推断。

您不能指定其他参数类型;您的示例
函数fn=(字符串s)->s只会产生一个编译器错误。但是当参数类型很明显时,可以省略它,比如在
函数fn=i->i.toString()中。请查看