如何在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();
答案 0 :(得分:29)
由于ObservableList
从addListener(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")));