Java 如何编写新的ListChangeListener<;项目>;()和lambda?

Java 如何编写新的ListChangeListener<;项目>;()和lambda?,java,lambda,listener,java-8,changelistener,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-gener

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

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

方法addListener(ListChangeListener)对于 输入可观察列表

名单声明如下:

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

由于
observateList
observate
接口继承了
addListener(invalizationListener)
,编译器无法确定调用哪个版本。通过强制转换指定lambda的类型应该可以解决这个问题

listItems.addListener((ListChangeListener)(c -> {/* ... */}));
您还可以明确指定
c
的类型:

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

listItems.addListener((ListChangeListener.Change此代码无需指定类型即可工作

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

searchResultListItems.addListener((ListChangeListener.Change无法对ChangeListener执行上述选项。使用PropertyListener…”Lambda表达式的签名与已更改的函数接口方法(ObservalEvalue,Object,Object)的签名不匹配。-尝试时:property.addListener((ChangeListener)e->({/*…*/}));您的解决方案适用于ListView,但问题是关于ObservableList,它没有focusedProperty。
listView.focusedProperty ().addListener ( (arg, oldVal, newVal) -> System.out
        .printf ("ListView %s focus%n", (newVal ? "in" : "out of")));