質問
私は最近、Javafxを探索するときに以下のこのコードにぶつかります、私はそれがわかります 観測可能なもの インターフェイスはありませんか?それの実装はありませんが、どのように変数を使用できますか?明らかに私はここで何かが足りないのですが、誰かが私に正しい方向を向けることができますか?
List list = new ArrayList(); ObservableList observableList = FXCollections.observableList(list); observableList.addListener(new ListChangeListener() { @Override public void onChanged(ListChangeListener.Change change) { System.out.println("Detected a change! "); } });
解決
私はこのコードだと思います:
FXCollections.observableList(list);
このメソッドは、インターフェイスの実装を取得することを意味します。ソースをダウンロードして確認できます。
他のヒント
FXCollections.observableList()
メソッドは、そのインターフェイスを実装するクラスのインスタンスを返します。ここでこのクラスの名前は表示されませんが、それを見る必要はありません(または実際、それが何であるかを知る必要さえあります)。これは、オブジェクト指向プログラミングの多型の全体的なポイントです:あなた、クライアントは、インターフェイスのみを扱います。それを実装する実際のクラスまたはクラスのセットを作成するのは、他の誰かの仕事です。この1つのポイントを取得すると、物事を処理できます。
もちろん、インターフェイスのタイプで変数を使用できます。 イスタンティエット それ(呼び出しはありません new ObservableList()
)、しかし、インターフェイスがその変数に対して有効であることを実装するクラスの任意のインスタンス。
ここで説明することはできないので、この説明をご覧ください。 変数としてインターフェイスを使用します
FXCollections.observableList()
コンクリートクラスのインスタンスを返す必要があります。 null
.
提示したコードが実際に機能する場合、結果は null
その場合から observableList.addListener(...)
スローします NullPointerException
.
これからそれはそれに従います FXCollections.observableList()
以外を返しますかnull
参照。
したがって、「[の実装はないという仮定ObservableList
] 'は誤っています:の実装がなければなりません ObservableList
どこか。あなたはそれにアクセスできないかもしれませんが、それは確かに存在します。
可能であれば、ソースコードを見てください FXCollections.observableList()
.
はい、アッパーが言うように.... fxcollections.observablelist()メソッドObservableListのインターフェイスを実装するクラスのインスタンスを返します...... t
http://docs.oracle.com/javafx/2.0/api/javafx/collections/observablelist.html
それがインターフェースです FXCollections.observableList()
あなたにそれを実装するオブジェクトを返しています。 Javadocでそれに注意してください ObservableList
拡張 Observable
...どこですか addListener()
から来た。
実装は次のとおりです 匿名クラス.