2014-11-26 2 views
10

자바에서 람다 식으로 시작하고 기괴한 것으로 생각되는 뭔가가 있습니다. 내가 잘못한 일을하고 있거나 해결 방법이 있다고 확신합니다. Multiline lambda comparator

는 비교기를 정의하려면, 내가 할 수있는 : 난 그냥 두 가지를 추가하는 경우, 그러나, 중대하다

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

"{". 내가하는 ActionEvent에 대한 전에 여러 문을 사용하여 시도하고 작동합니까

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()); 
     }); 

오류는 "{"하지만 setComparator에 관련되지 않은 : 나는 컴파일 오류가 발생합니다 :

그것은 하나의 인수 만 갖고 있기 때문입니까?

답변

19

당신이 setOnAction로 구현하는 방법은

그것은 void의 반환 형식이있다
public void handleEvent(ActionEvent event) ; 

:

당신이 setComparator로 구현하는 방법은

: 그것은 아무것도 반환하지 않습니다 즉,
public int compare(CustomCell cell1, CustomCell cell2) ; 

값을 반환합니다. 긴 양식을 사용하려면 값을 반환하는 메소드에 대한 명시적인 return 문이 있어야합니다.

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

감사합니다. 그렇습니다. 그것이 이유입니다. 내가 얻은 오류는별로 도움이되지 못했습니다. – luanjot