Writing a lambda expression when parameters are ig

2019-01-26 03:42发布

问题:

How do I write a lambda expression if it doesn't require arguments and hence its name is excessive?

This way doesn't compile:

setRowFactory(-> new TableRowCustom());

But this one does:

setRowFactory(__ -> new TableRowCustom());

Is there a better way?

回答1:

Since you've mentioned that this works

setRowFactory(__ -> new TableRowCustom());

I assume that the expected functional interface method must accept a single argument. The identifier _ is a reserved keyword since Java 8.

I would just use a throwaway single (valid identifier) character.

setRowFactory(i -> new TableRowCustom());
setRowFactory($ -> new TableRowCustom()); // allowed, but avoid this

or even

setRowFactory(ignored -> new TableRowCustom());

to be explicit.

The Java Language Specification defines the syntax of a lambda expression

LambdaExpression:
  LambdaParameters -> LambdaBody 

and

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

In other words, you cannot omit an identifier.


As Holger suggests, if and when they decide to use _ as an unused parameter name, it will be easy to change from __ to _ in your source code. You may want to just stick with that for now.