Java Lambda表达式的参数传递遵循以下规则:
-
参数类型推断:Java编译器可以根据上下文推断Lambda表达式的参数类型。这意味着你不需要显式地声明参数类型,只需提供参数名称即可。例如,
(x, y) -> x + y
是一个有效的Lambda表达式,其中x和y的类型会被推断为相应的函数接口的参数类型。 -
单个参数可省略括号:当Lambda表达式只有一个参数时,可以省略参数周围的括号。例如,
x -> x * x
是一个有效的Lambda表达式,表示计算平方的函数。 -
多个参数需使用括号:当Lambda表达式有多个参数时,需要使用括号将参数列表包围起来。例如,
(x, y) -> x * y
是一个有效的Lambda表达式,表示计算两个数的乘积。 -
无参数时需使用空括号:当Lambda表达式没有参数时,需要使用空括号
()
表示。例如,() -> System.out.println("Hello World!")
是一个有效的Lambda表达式,表示打印 “Hello World!”。 -
参数列表中的参数名称必须唯一:在Lambda表达式的参数列表中,每个参数名称必须是唯一的。重复的参数名称会导致编译错误。
-
参数类型必须兼容:在Lambda表达式中,参数类型必须与目标函数接口的参数类型兼容。例如,如果目标函数接口的参数类型为
Integer
,那么Lambda表达式的参数类型也必须是Integer
或其子类。 -
可变参数:Lambda表达式支持可变参数,允许在参数列表中使用
...
语法。例如,(int... numbers) -> Arrays.stream(numbers).sum()
是一个有效的Lambda表达式,表示计算一组整数的和。 -
默认方法和静态方法:Lambda表达式不能直接访问目标函数接口的默认方法和静态方法。要访问这些方法,需要使用方法引用。例如,
List::size
是一个有效的方法引用,表示获取列表的大小。
遵循这些规则,可以确保Lambda表达式的参数传递正确且易于理解。