Подтвердить что ты не робот

Как написать новый ListChangeListener <Item>() с lambda?

Как написать новый ListChangeListener() с lambda в java8?

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

Это то, что я пробовал:

listItems.addListener(c->{});

Но состояние затмения:

Метод addListener (ListChangeListener) неоднозначен для тип ObservableList.

Список объявляется как:

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

Ответ 1

Так как ObservableList наследует addListener(InvalidationListener) от интерфейса Observable, компилятор не может определить, какую версию вызывать. Указание типа лямбда через литье должно исправить это.

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

Вы также можете явно указать тип c:

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

Ответ 2

Этот код работает без указания типов.

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