如何使用lambda?</item>编写新的ListChangeListener <item>()

时间:2014-04-28 07:56:54

标签: java lambda listener java-8 changelistener

如何在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表示:

  

方法addListener(ListChangeListener)不明确   输入ObservableList。

列表声明为:

ObservableList<Item> listItems = FXCollections.observableArrayList();

2 个答案:

答案 0 :(得分:29)

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

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

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

listItems.addListener((ListChangeListener.Change<? extends Item> c) -> {/* ... */});

答案 1 :(得分:2)

此代码无需指定类型即可运行。

listView.focusedProperty ().addListener ( (arg, oldVal, newVal) -> System.out
        .printf ("ListView %s focus%n", (newVal ? "in" : "out of")));