- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Java 9 出来了,Observer
已被弃用。这是为什么?这是否意味着我们不应该再实现观察者模式了?
最好知道什么是更好的选择?
最佳答案
这是为什么?这是否意味着我们不应该再实现观察者模式?
先回答后半部分——
YES,这确实意味着您不应该再实现 Observer
和 Obervable
。
他们没有为应用程序提供足够丰富的事件模型。例如,他们可能只支持某事发生变化的概念,但不传达任何关于发生变化的信息。
Alex's answer前面很好地说明了 Observer
有一个弱点:所有 Observable
都是相同的。您必须实现基于 instanceof
的逻辑,并将对象转换为具体类型并放入 Observable.update()
方法中。
除此之外还有像 could not serialize the Observable
这样的错误。类,因为它没有实现 Serializable
接口(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 - Observer 在 Java 9 中被弃用了。我们应该用什么来代替它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43644540/
我是一名优秀的程序员,十分优秀!