什么是java API的通用兼容性规则

什么是java API的通用兼容性规则,java,backwards-compatibility,Java,Backwards Compatibility,详细内容: 例如,如果我们使用公共API,那么在JDK1.4中编写java程序,if应该在它上面的所有版本中正确运行。在1.4、1.5、1.6和1.7的所有更新版本中 另外,不同更新程序版本(例如1.6.22和1.6.23)之间的可组合性规则是什么?哪些不能更改,哪些可以更改? 当然,公共API定义不能更改,其他的如何?javadoc?内部API定义、实现 如果有人能就这个话题提出一份具体的官方文件,那就太好了。谢谢 java文档bug中有一个例子,他们不打算在更新程序版本之间进行更改。看 这应

详细内容: 例如,如果我们使用公共API,那么在JDK1.4中编写java程序,if应该在它上面的所有版本中正确运行。在1.4、1.5、1.6和1.7的所有更新版本中

另外,不同更新程序版本(例如1.6.22和1.6.23)之间的可组合性规则是什么?哪些不能更改,哪些可以更改? 当然,公共API定义不能更改,其他的如何?javadoc?内部API定义、实现

如果有人能就这个话题提出一份具体的官方文件,那就太好了。谢谢

java文档bug中有一个例子,他们不打算在更新程序版本之间进行更改。看

这应该是它的大图之一,但我们最好对此有一个完整的描述


需要知道完整的故事,这样我们才能安全地升级到更大的版本。

这不是一个完整的答案,但我要补充的是,它将运行和将编译是两件不同的事情。1.5中引入的关键字将阻止编译某些1.4代码,但字节码将正常运行

一般规则是,根据Java
X
的API编写和编译的任何代码都应该在Java
Y
上运行,其中
Y>=X

偶尔也有例外;e、 g.应用程序的行为取决于Java
X
中一些未记录的行为(通常是一个bug),这些行为在以后的版本中得到了纠正

顺便说一句,没有一个文档列出这些不兼容。所有Java主要版本的发行说明都包括一个可能导致旧代码中断的更改列表

话虽如此,谨慎的方法是确保在升级到较新的Java版本时彻底测试/重新测试软件。如果您的软件已发送给客户/客户,请让他们知道升级是否安全/何时安全,并(如有必要)为他们提供测试发现的任何问题的修复


需要了解完整的情况,以便我们能够安全地升级到更大的版本

安全感不是重点。在更高版本上彻底测试应用程序。这是唯一切实可行的解决方案。如果每一个不兼容都被详尽地记录下来,那么情况就是这样

想想看。您如何确定您的应用程序不会受到更改XYZ的影响?或者您使用的某些第三方库不会受到影响?回答:你不能


你认为甲骨文应该以不同的方式处理这个问题,在这里抱怨是不会有任何区别的。我并不认为他们可以在不改变商业模式的情况下更好地处理这个问题。对于一个保证没有版本兼容性问题的Java平台,您准备支付多少费用?

几乎任何东西都可以在版本之间进行更改,但这类事情没有固定的规则。使用发行说明在不同版本之间发布或审阅更改,例如:


通常只有错误修复才是次要版本(如您详细介绍的1.6.22-1.6.23)或简单增强的原因,这些都是好事。当主要版本号更改时,您可以期待更多的主要更改,但您仍然“希望”反向兼容性。

我认为JDK从未更改过破坏向后可比性的API(除非是无意中)

他们一开始就引入了@deprecated标记,可能是想将来可能需要进行一些API清理。但这永远不会发生。从未删除过@deprecated API,也未更改行为

例如,如果我们使用公共API,那么在JDK1.4中编写java程序,if应该在它上面的所有版本中正确运行。在1.4、1.5、1.6和1.7的所有更新版本中

  • 请参阅,这显示了公共jdk API中的突破性更改
  • 请参阅以下有关版本兼容性的官方文档:

您的意思是,在1.4中编写的某些java代码无法在1.5中编译。但是他们编译的字节码可以在1.5JRE中运行吗?如果有这样的例子就好了。thanks@BenXu,创建一个名为
enum
的变量或字段。这将在Java 1.4上编译并在Java 5.0上运行,但不会在Java 5.0中编译。@BenXu-我不是故意无礼,但这个答案并没有回答您实际提出的任何问题。您询问了API兼容性,而这个问题根本没有提到API。当你接受一个答案时,你是在告诉发现你问题的其他人,你认为这是他们正在阅读的问题的最佳答案。。。而不是你脑子里从来没有问过的那个。应该有一些更一般的规则。否则,升级一个巨大的软件将需要很多努力,特别是如果没有艺术的话。(让我们排除新版本引入的毫无根据的bug,因为每个软件都可能有bug,java本身也是如此)java X中的bug有可能在以后的版本中修复。但在软件中,它解决了这个bug。但是后来的Java修复了它,它使解决方案本身成为一个bug。@Ben Xu-你太不现实了。新Java版本故意破坏向后兼容性的唯一情况是没有真正的选择。@Ben Xu,Sun/Oracle已经有一段时间没有提供Java 1.4或Java 5.0的免费支持了。如果您为业务支持付费,他们可能会在您可能遇到的兼容性问题上为您提供帮助。(但不要期望一切都是免费的;)