2016-06-02 10 views
12

Come si scrive un'espressione lambda se non richiede argomenti e quindi il suo nome è eccessivo?Scrittura di un'espressione lambda quando i parametri vengono ignorati nel corpo

In questo modo non può essere compilato:

setRowFactory(-> new TableRowCustom()); 

Ma questo fa:

setRowFactory(__ -> new TableRowCustom()); 

C'è un modo migliore?

+1

Qual è il tipo di interfaccia funzionale (e il metodo) previsto dal parametro 'setRowFactory'? –

+2

è anche possibile utilizzare un riferimento al metodo con solo TableRowCustom :: new che sostituisce lambda – george

+0

@george, non è possibile utilizzare un riferimento al metodo per fare riferimento a un metodo che non prende lo stesso numero di parametri del funzionale di destinazione scrivi (qui 0 vs 1, apparentemente). –

risposta

17

Dal momento che hai detto che questo funziona

setRowFactory(__ -> new TableRowCustom()); 

Suppongo che il metodo di interfaccia funzionale previsto deve accettare un singolo argomento. The identifier _ is a reserved keyword since Java 8.

Vorrei utilizzare solo un carattere throwaway singolo (identificativo valido).

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

o anche

setRowFactory(ignored -> new TableRowCustom()); 

essere espliciti.

Il Java Language Specification definisce la sintassi di un'espressione lambda

LambdaExpression: 
    LambdaParameters -> LambdaBody 

e

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

In altre parole, non è possibile omettere un identificatore.


Come Holger suggerisce, se e quando decidono di utilizzare _ come un nome di parametro non utilizzato, sarà facile cambiare __-_ nel codice sorgente. Potresti voler semplicemente restare con quello per ora.

+5

Non obietterò l'uso di '__' per un parametro non necessario in quanto apparentemente il singolo' _' è riservato perché è destinato a diventare l'identificatore usa e getta per i parametri non utilizzati nel futuro. Quando ciò accadeva, cambiare '__ -> expression' in' _ -> expression' non sarebbe un grosso problema. – Holger

Problemi correlati