Подтвердить что ты не робот

Написание выражения лямбда при игнорировании параметров в теле

Как написать лямбда-выражение, если оно не требует аргументов и, следовательно, его имя является чрезмерным?

Этот способ не компилируется:

setRowFactory(-> new TableRowCustom());

Но это делает:

setRowFactory(__ -> new TableRowCustom());

Есть ли лучший способ?

4b9b3361

Ответ 1

Поскольку вы упомянули, что это работает

setRowFactory(__ -> new TableRowCustom());

Я предполагаю, что ожидаемый метод функционального интерфейса должен принимать один аргумент. Идентификатор _ является зарезервированным ключевым словом, так как Java 8.

Я просто использовал бы одноразовый одиночный (действительный идентификатор).

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

или даже

setRowFactory(ignored -> new TableRowCustom());

чтобы быть явным.

Спецификация языка Java определяет синтаксис выражения лямбда

LambdaExpression:
  LambdaParameters -> LambdaBody 

и

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

Другими словами, вы не можете опустить идентификатор.


Как Holger предлагает, если и когда они решат использовать _ в качестве неиспользуемого имени параметра, будет легко измениться с __ на _ в исходном коде. На данный момент вы можете просто придерживаться этого.