2016-06-02 23 views
12

Argüman gerektirmediğinde ve adının aşırı olması durumunda nasıl bir lambda ifadesi yazarım?Vücutta parametreler göz ardı edildiğinde bir lambda ifadesi yazma

setRowFactory(-> new TableRowCustom()); 

Ama bu yapar::

Bu şekilde derleme değil

setRowFactory(__ -> new TableRowCustom()); 

daha iyi bir yolu var mı? Bu

setRowFactory(__ -> new TableRowCustom()); 

çalıştığını söz ettik bu yana

+1

"setRowFactory" parametresi tarafından beklenen işlevsel arabirim türü (ve yöntemi) nedir? –

+2

ayrıca bir metod referansı ile sadece TableRowCustom :: new olan ve lambda – george

+0

@george yerine bir yöntem referansı kullanabilirsiniz, hedef işlevle aynı sayıda parametreyi almayan bir yönteme başvurmak için bir yöntem referansı kullanamazsınız tipi (burada 0'a 1, görünüşte). –

cevap

17

beklediğim işlevsel arayüz yöntem tek bir argüman kabul etmesi gerektiğini varsayalım. The identifier _ is a reserved keyword since Java 8.

Sadece bir atlamalı (geçerli tanımlayıcı) karakter kullanırdım.

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

hatta

setRowFactory(ignored -> new TableRowCustom()); 

açık olması. Java Language Specification

LambdaExpression: 
    LambdaParameters -> LambdaBody 

ve diğer bir deyişle

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

, bir tanımlayıcı ihmal edilemez bir lambda ifade sözdizimini tanımlamaktadır. onlar kullanılmayan bir parametre adı olarak _ kullanmaya karar zaman, kaynak kodunda _ için __ değiştirmek kolay olacak ve eğer Holger gibi


öneriyor. Şimdilik bununla uğraşmak isteyebilirsiniz.

+5

Kullanılmayan parametreler için throwaway tanımlayıcısı olması amaçlandığından, tek bir _ parametresinin saklı olduğu gibi gereksiz bir parametre için '__ 'kullanmamaya itiraz etmem. geleceği. Bu olduğunda, '__ -> expression 'ifadesinin' _ -> ifadesine değiştirilmesi büyük bir sorun olmazdı. – Holger