java - Java 9 中不推荐使用 Observer。我们应该使用什么来代替它?

标签 java java-8 deprecated observer-pattern java-9

Java 9 出来了,Observer已被弃用。 这是为什么?这是否意味着我们不应该再实现观察者模式?

很高兴知道什么是更好的替代方案?

最佳答案

这是为什么呢?这是否意味着我们不应该再实现观察者模式?

先回答后半部分 -

,这确实意味着您不应该再实现 ObserverObervable

Why were they deprecated -

他们没有为应用程序提供足够丰富的事件模型。例如,他们只能支持某些内容已更改的概念,但没有传达有关已更改内容的任何信息。

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 jdk9 java.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/

相关文章:

java - Selenium 驱动程序选择错误

java - Stream 中有没有办法将 SUM 作为中间操作

deprecated - express-session 已弃用 req.secret;提供 secret 选项 app.js :27:9

java - Jmeter如何生成哈希sha512

JavaFx 事件参数类型不匹配

java - Stream.findAny 是短路操作吗?

C++ - 不推荐从字符串常量到 ‘char*’ 的转换

go - 如何使用Ancestor查询和最新的golang库从数据存储中读取

java - Java 中缺少 “Permissions” list 属性

java - java惰性流构造中的问题