在正文中忽略参数时编写 lambda 表达式

2022-09-01 03:53:13

如果 lambda 表达式不需要参数,因此它的名称过多,我该如何编写它?

这种方式不会编译:

setRowFactory(-> new TableRowCustom());

但是这个确实如此:

setRowFactory(__ -> new TableRowCustom());

有没有更好的方法?


答案 1

既然你已经提到这有效

setRowFactory(__ -> new TableRowCustom());

我假设预期的函数接口方法必须接受单个参数。标识符 _ 是自 Java 8 以来的保留关键字。

我只使用一次性的单个(有效标识符)字符。

setRowFactory(i -> new TableRowCustom());
setRowFactory($ -> new TableRowCustom()); 

虽然,您可能应该避免使用 Java 语言规范声明$

美元符号应仅用于机械生成的源代码,或者很少用于访问遗留系统上预先存在的名称。下划线可用于由两个或多个字符组成的标识符,但由于它是关键字,因此不能用作单字符标识符。

您也可以写出来

setRowFactory(ignored -> new TableRowCustom());

要明确。

Java 语言规范定义了 lambda 表达式的语法

LambdaExpression:
  LambdaParameters -> LambdaBody 

LambdaParameters:
  Identifier
  ( [FormalParameterList] )
  ( InferredFormalParameterList )
InferredFormalParameterList:
  Identifier {, Identifier}

换句话说,您不能省略标识符。


正如 Holger 所建议的那样,如果他们决定用作未使用的参数名称,则在源代码中很容易从 更改为 。你可能想暂时坚持下去。____


答案 2

推荐