2014-11-26 30 views
10

Java'daki lambda ifadeleriyle başlıyorum ve tuhaf olarak düşündüğüm bir şey var ve eminim ki yanlış bir şey yapıyorum veya bir çözüm var. Çok satırlı lambda karşılaştırıcısı

bir karşılaştırıcı tanımlamak için, ben yapabilirsiniz: Sadece iki eklerseniz, ancak, büyük

col.setComparator((CustomCell o1, CustomCell o2) -> 
      ((Comparable) o1.getValue()).compareTo(o2.getValue()) 
     ); 

"{". Ben actionevents için önce satırlı ifadelerini kullanarak denedim ve nasıl çalışır

The method setComparator(Comparator<CustomCell>) in the type 
TableColumnBase<CustomParentCell,CustomCell> is not applicable for the arguments 
((CustomCell o1, CustomCell o2) -> {}) 

:

col.setComparator((CustomCell o1, CustomCell o2) -> { 
      ((Comparable) o1.getValue()).compareTo(o2.getValue()); 
     }); 

hatası "{", ama setComparator için ilişkili değildir: Bir derleme hatası alıyorum:

setOnAction(event -> { 
     // do something 
}); 

Tek bir argümanı olduğundan dolayı mı?

cevap

19

Eğer setOnAction ile uyguladıklarını yöntemdir

O void bir dönüş türü vardır
public void handleEvent(ActionEvent event) ; 

:

Eğer setComparator ile uyguladıklarını yöntem

: o şey dönmez yani Bir değer döndüren
public int compare(CustomCell cell1, CustomCell cell2) ; 

. Daha uzun bir form kullanmak için , bir değer döndüren yöntemler için açık bir dönüş ifadesi olması gerekir:

col.setComparator((CustomCell o1, CustomCell o2) -> { 
     return ((Comparable) o1.getValue()).compareTo(o2.getValue()); 
    }); 
+0

Teşekkür ederim. Evet, nedeni budur. Benim aldığım hata çok yardımcı olmadı. – luanjot