Java8でラムダを使用して新しい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->{});
しかし、Eclipseは次のように述べています。
メソッドaddListener(ListChangeListener)は、タイプObservableListに対してあいまいです。
リストは次のように宣言されています。
ObservableList<Item> listItems = FXCollections.observableArrayList();
ObservableList
はObservable
インターフェースからaddListener(InvalidationListener)
を継承するため、コンパイラーは呼び出すバージョンを判別できません。キャストを介してラムダのタイプを指定すると、これが修正されるはずです。
listItems.addListener((ListChangeListener)(c -> {/* ... */}));
c
のタイプを明示的に指定することもできます。
listItems.addListener((ListChangeListener.Change<? extends Item> c) -> {/* ... */});
このコードは、タイプを指定しなくても機能します。
listView.focusedProperty ().addListener ( (arg, oldVal, newVal) -> System.out
.printf ("ListView %s focus%n", (newVal ? "in" : "out of")));