如何在Java8中使用lambda编写新的ListChangeListener()?

listItems.addListener(new ListChangeListener<Item>() {
    @Override
    public void onChanged(
        javafx.collections.ListChangeListener.Change<? extends Item> c) {
        // TODO Auto-generated method stub
    }
});

这是我尝试的:
listItems.addListener(c->{});

但是 eclipse 指出:



该列表声明为:
ObservableList<Item> listItems = FXCollections.observableArrayList();

最佳答案

由于ObservableListaddListener(InvalidationListener)接口(interface)继承了Observable,因此编译器无法确定要调用的版本。通过强制转换指定lambda的类型应该可以解决此问题。

listItems.addListener((ListChangeListener)(c -> {/* ... */}));

您还可以显式指定c的类型:
listItems.addListener((ListChangeListener.Change<? extends Item> c) -> {/* ... */});

09-05 06:54