Java 9がリリースされ、Observer
非推奨になりました。それはなぜでしょうか? オブザーバー パターンを実装しなくてよいということでしょうか?
より良い代替案が何かを知っておくと良いでしょう。
ベストアンサー1
それはなぜでしょうか? オブザーバー パターンを実装するべきではないということでしょうか?
まず後半の部分に答えると、
はいObserver
つまり、 およびを実装する必要がなくなるということですObervable
。
アプリケーションに十分なイベント モデルを提供できませんでした。たとえば、何かが変更されたという概念しかサポートできず、何が変更されたかに関する情報は伝達されませんでした。
アレックスの答え冒頭でうまく述べられているObserver
弱点があります: すべてのObservable
は同じですに基づくロジックを実装しinstanceof
、オブジェクトを具体的な型にキャストして実装update()
メソッドに組み込む必要がありますObserver
。
それに加えて、次のようなバグもありましたシリアル化できませんでしたObservable
クラスはインターフェースを実装しておらずSerializable
、そのメンバーはすべてプライベートであったため、クラスではありません。
それに代わるより良い方法は何でしょうか?
一方、Listeners
多くの型があり、コールバックメソッドがあり、キャストを必要としません。@Raviが指摘したように、答え活用できるPropertyChangeListener
その代わり。
残りの部分については、@Deprecation
他の回答にリンクされている他のパッケージを調べるための適切なドキュメントがマークされています。
廃止は、分析でもマークされていることに注意してください。このメール-
最近、これらの問題に遭遇する人は、おそらく、
RxJava
または他のリアクティブ ストリーム フレームワークを使用しているときに誤って遭遇しているのでしょう。その場合、ユーザーは通常、代わりに jdk9java.util.concurrent.Flow
API を使用することになります。すべてのリアクティブ ストリーム フレームワークは、計画されている今後の jdk9 互換バージョン内で互換性/相互運用性を持つはずです。
編集: また、API が廃止されたのは、主に上記の理由だけではなく、何らかの方法で実装が改善されたことを示すために提起されたいくつかのバグ レポート (上記リンク) のコメントに記載されているように、そのようなレガシー コードを維持できないことも挙げられます。