2016-06-02 20 views
12

Jak napisać wyrażenie lambda, jeśli nie wymaga ono argumentów, a zatem jego nazwa jest nadmierna?Zapisywanie wyrażenia lambda, gdy parametry są ignorowane w ciele

ten sposób nie kompiluje:

setRowFactory(-> new TableRowCustom()); 

Ale to się robi:

setRowFactory(__ -> new TableRowCustom()); 

Czy istnieje lepszy sposób?

+1

Jaki jest typ interfejsu funkcjonalnego (i metoda) oczekiwany przez parametr 'setRowFactory'? –

+2

można również użyć odwołania do metody tylko TableRowCustom :: new, które jest zamiennikiem dla lambge – george

+0

@george, nie można użyć odwołania do metody, aby odwołać się do metody, która nie przyjmuje takiej samej liczby parametrów, jak docelowa funkcja type (najwyraźniej tutaj 0 vs 1). –

Odpowiedz

17

Skoro już wspomniałem, że to działa

setRowFactory(__ -> new TableRowCustom()); 

Zakładam, że oczekiwany sposób funkcjonalny interfejs musi przyjmować jeden argument. The identifier _ is a reserved keyword since Java 8.

Po prostu użyłbym znaku jednorazowego (ważny identyfikator).

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

lub nawet

setRowFactory(ignored -> new TableRowCustom()); 

być jawne.

Java Language Specification definiuje składnię wyrażenia lambda

LambdaExpression: 
    LambdaParameters -> LambdaBody 

i

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

Innymi słowy, nie można pominąć identyfikator.


Jak Holger wskazuje, czy i kiedy zdecydujesz się skorzystać _ jako niewykorzystane nazwy parametru, to będzie łatwo zmienić z __ do _ w kodzie źródłowym. Możesz na razie po prostu trzymać się tego.

+5

Nie będę sprzeciwiał się użyciu '__' dla niepotrzebnego parametru, ponieważ najwyraźniej pojedynczy' _' jest zarezerwowany, ponieważ ma stać się identyfikatorem nieużywanych parametrów w przyszłość. Gdy tak się stanie, zmiana wyrażenia "__ ->" na wyrażenie "_ ->" nie będzie dużym problemem. – Holger