How do I write a new ListChangeListener<Item>() with lambda?
20,673
Since ObservableList
inherits addListener(InvalidationListener)
from the Observable
interface, the compiler is unable to determine which version to call. Specifying the type of the lambda through a cast should fix this.
listItems.addListener((ListChangeListener)(c -> {/* ... */}));
You can also explicitly specify the type of c
:
listItems.addListener((ListChangeListener.Change<? extends Item> c) -> {/* ... */});
Related videos on Youtube
Author by
simonides
Updated on November 05, 2020Comments
-
simonides about 3 years
How do I write a new ListChangeListener() with lambda in java8?
listItems.addListener(new ListChangeListener<Item>() { @Override public void onChanged( javafx.collections.ListChangeListener.Change<? extends Item> c) { // TODO Auto-generated method stub } });
This is what I tried:
listItems.addListener(c->{});
But eclipse states:
The method addListener(ListChangeListener) is ambiguous for the type ObservableList.
The List is declared as:
ObservableList<Item> listItems = FXCollections.observableArrayList();
-
simonides over 9 years
searchResultListItems.addListener((ListChangeListener.Change<? extends Contact> c) ->{});
did the trick thx for the hint -
ktul over 6 yearsYour solution works for ListViews, but the question was about ObservableLists, which do not have a focusedProperty.
-
Lealo over 6 yearsCannot do the above option with ChangeListener. Using PropertyListeners... "Lambda expression`s signiture do not match the signature of the functional interface method changed(ObservableValue, Object, Object)". - When trying to: property.addListener((ChangeListener) e -> ({/* ... */}));