在主体中忽略参数时编写lambda表达式

Dim*_*ims 27 java lambda java-8

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

这种方式不编译:

setRowFactory(-> new TableRowCustom());
Run Code Online (Sandbox Code Playgroud)

但是这个做了:

setRowFactory(__ -> new TableRowCustom());
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

Sot*_*lis 32

既然你提到过这个有用了

setRowFactory(__ -> new TableRowCustom());
Run Code Online (Sandbox Code Playgroud)

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

我只想使用一次性单(有效标识符)字符.

setRowFactory(i -> new TableRowCustom());
setRowFactory($ -> new TableRowCustom()); // allowed, but avoid this
Run Code Online (Sandbox Code Playgroud)

甚至

setRowFactory(ignored -> new TableRowCustom());
Run Code Online (Sandbox Code Playgroud)

要明确.

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

LambdaExpression:
  LambdaParameters -> LambdaBody 
Run Code Online (Sandbox Code Playgroud)

LambdaParameters:
  Identifier
  ( [FormalParameterList] )
  ( InferredFormalParameterList )
InferredFormalParameterList:
  Identifier {, Identifier}
Run Code Online (Sandbox Code Playgroud)

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


作为霍尔格建议,如果当他们决定使用_作为一个未使用的参数名称,它会很容易从改变___你的源代码.你可能想暂时坚持下去.

  • 我不反对使用`__`作为不必要的参数,因为显然单个`_`是保留的,因为它打算成为未来未使用参数的一次性标识符.当发生这种情况时,将`__ - >表达式'改为`_ - >表达式`将不是什么大问题. (6认同)
  • 然后使用 `(__,___,whatIcareAbout)`...目前不是最佳选择,但它清楚地表明了目的。 (3认同)
  • 不幸的是 __ 的工作方式与 python 占位符的工作方式不同,因为 `(__,__,whatIcareAbout)` 会导致 `java: variable __ is already defined in method` 错误。忽略 1,忽略 2 可能更可取 (2认同)