java – 如何用lambda写一个新的ListChangeListener()?

如何在 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->{});

但日食说:

The method addListener(Listchangelistener) is ambiguous for the
type ObservableList.

列表被声明为:

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

解决方法

由于ObservableList从Observable接口继承addListener(InvalidationListener),编译器无法确定要调用的版本.通过转换指定lambda的类型应该可以解决这个问题.
listItems.addListener((Listchangelistener)(c -> {/* ... */}));

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

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

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...