Java 9 出来了,Observer
已被弃用。
这是为什么?这是否意味着我们不应该再实现观察者模式?
很高兴知道什么是更好的替代方案?
最佳答案
这是为什么呢?这是否意味着我们不应该再实现观察者模式?
先回答后半部分 -
是,这确实意味着您不应该再实现 Observer
和 Obervable
。
他们没有为应用程序提供足够丰富的事件模型。例如,他们只能支持某些内容已更改的概念,但没有传达有关已更改内容的任何信息。
Alex's answer Observer
有一个弱点:所有 Observable
都是相同的。您必须实现基于 instanceof
的逻辑,并将对象转换为具体类型到 Observable.update()
方法中。
要补充的是,还有像 could not serialize the Observable
这样的错误类,因为它没有实现 Serialized
接口(interface),并且它的所有成员都是私有(private)的。
有什么更好的替代方案吗?
另一方面,Listeners
有很多类型,它们有回调方法并且不需要强制转换。正如 @Ravi 在他的 answer 中指出的那样您可以使用PropertyChangeListener
反而。
对于其余部分,@Deprecation
已标记有适当的文档,以探索其他答案中链接的其他包。
请注意,弃用还标有分析,如 this mail 中所述。 -
These days, anyone encountering these is probably hitting them by mistake while using
RxJava
or other reactive-stream frameworks. In which case, users will normally want to instead use the jdk9java.util.concurrent.Flow
APIs that all reactive-streams frameworks should be compatible/interoperable within their planned upcoming jdk9-compatible versions.
编辑:还值得一提的是,API 的弃用主要不仅仅是因为上述原因,还因为无法维护上述遗留代码在一些错误报告(上面链接)的评论中,这些错误报告的提出是为了以一种或另一种方式标志着其实现的改进。
关于java - Java 9 中不推荐使用 Observer。我们应该使用什么来代替它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60241671/