1. ホーム
  2. java

[解決済み] オブザーバーはJava 9で非推奨となりました。 その代わりに何を使うべきですか?

2022-04-29 20:59:46

質問

Java 9が登場し Observer は非推奨となりました。 なぜでしょうか?もうobserverパターンを実装してはいけないということなのでしょうか?

何か良い代替案があれば教えていただきたいのですが。

解決方法は?

なぜでしょうか?もうobserverパターンを実装してはいけないということなのでしょうか?

まず後者の部分に答えます -。

はい を実装してはいけないということです。 ObserverObervable はもうない。

非推奨となった理由 -

アプリケーションに十分なイベントモデルを提供できなかったからです。例えば、何かが変更されたという概念だけをサポートし、何が変更されたかについての情報は一切伝えられませんでした。

アレックスの答え ということをうまく前面に出しています。 Observer には弱点があります:すべての Observable は同じ . に基づくロジックを実装する必要があります。 instanceof にオブジェクトをキャストし、具体的な型に変換して Observable.update() メソッドを使用します。

さらに、次のようなバグがありました。 をシリアライズすることができませんでした。 Observable クラスを実装していないため Serializable インターフェイスを持ち、そのメンバはすべてプライベートでした。

それに代わる良い方法はありますか?

一方 Listeners は多くの型を持ち、それらはコールバックメソッドを持ち、キャスティングを必要としない。で@Raviさんが指摘されているように 回答 を利用することができます。 PropertyChangeListener の代わりに

それ以外の部分は @Deprecation は、他の回答でもリンクされているように、他のパッケージを探索するための適切なドキュメントをマークしています。


にあるように、非推奨も解析でマークされていることに注意。 本メール -

最近、このようなものに遭遇する人は、おそらく間違って打っているのでしょう。 を使用しているときに誤って RxJava や他のリアクティブストリームフレームワークを使用することができます。その場合 その場合、通常は jdk9 の java.util.concurrent.Flow すべてのリアクティブストリームフレームワークのAPI 今後予定されている jdk9互換バージョン。

編集 : また、APIの非推奨は上記の理由だけでなく、いくつかのバグレポート(上記リンク)のコメントにあるように、レガシーコードを維持することができないことも言及する価値があると思います。