Как написать новый 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();
Ответы
Ответ 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")));