多行λ比较器

2022-09-04 07:59:25

我从Java中的lambda表达式开始,有一些我认为很奇怪的事情,我确信我做错了什么,或者它有一个解决方法。

要定义比较器,我可以做到:

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

但是,如果我只是添加两个“{”,那就太好了。我收到编译错误:

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

该错误与“{”无关,而是与:setComparator

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

我之前尝试过将多行语句用于操作事件,它确实有效:

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

是因为它只有一个参数吗?


答案 1

您正在实现的方法是setOnAction

public void handleEvent(ActionEvent event) ;

它的返回类型为:即它不返回任何内容:void

您正在实现的方法是setComparator

public int compare(CustomCell cell1, CustomCell cell2) ;

返回一个值。若要使用较长的形式,必须为返回值的方法提供显式 return 语句:

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

答案 2

推荐