如何用lambda编写新的ListChangeListener <Item>()?

sim*_*des 14 java lambda listener changelistener java-8

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

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

这是我试过的:

listItems.addListener(c->{});
Run Code Online (Sandbox Code Playgroud)

但是eclipse说:

对于ObservableList类型,方法addListener(ListChangeListener)是不明确的.

列表声明为:

ObservableList<Item> listItems = FXCollections.observableArrayList();
Run Code Online (Sandbox Code Playgroud)

小智 31

由于ObservableList继承addListener(InvalidationListener)Observable接口,编译器无法确定要调用的版本.通过强制转换指定lambda的类型应该解决这个问题.

listItems.addListener((ListChangeListener)(c -> {/* ... */}));
Run Code Online (Sandbox Code Playgroud)

您还可以明确指定以下类型c:

listItems.addListener((ListChangeListener.Change<? extends Item> c) -> {/* ... */});
Run Code Online (Sandbox Code Playgroud)

  • `searchResultListItems.addListener((ListChangeListener.Change <?extends Contact> c) - > {});`做了提示的技巧thx (9认同)