【发布时间】:2019-03-30 17:03:43
【问题描述】:
我目前正在通过this 学习 Java9~10 中的 HTTP/2 客户端。
Java 9 确实有HttpRequest.BodyProcessor 接口,而Java 10 没有HttpRequest.BodyProcessor,但它确实有HttpRequest.BodyPublisher。两个接口是相似的。
为什么 Java 更改接口的名称?我认为向后兼容性被忽略了。
【问题讨论】:
我目前正在通过this 学习 Java9~10 中的 HTTP/2 客户端。
Java 9 确实有HttpRequest.BodyProcessor 接口,而Java 10 没有HttpRequest.BodyProcessor,但它确实有HttpRequest.BodyPublisher。两个接口是相似的。
为什么 Java 更改接口的名称?我认为向后兼容性被忽略了。
【问题讨论】:
HttpClient has been a part of an incubator module 带有 Java 9 和 10。所以人们看到的更多的是原型作品,虽然理想情况下不应该有太大变化,但不能保证不变。
来自孵化器JEP#Incubator Modules:
孵化功能是一个非平凡大小的 API,它在 开发以最终包含在 Java SE 平台中,或 JDK,但尚未得到充分证明。
如果你想使用标准模块,你可以在 Java 11 中使用它,它被命名为java.net.http。 [请注意,它标记为自 Java 11 而不是 9 或 10]
如果您已经在 Java9/10 中使用HttpClient,那么The jdk.incubator.httpclient module not found in Java11 可以帮助您迁移 Java 11 中的使用。
有点跑题:如果你对比一下两个JDK中的源码,你会发现BodyPublisher中的方法都有更新与其之前的状态相比,在 Java 10 和 Java 11 中都是如此。
【讨论】: