什么是一般的Java API兼容性规则

时间:2011-09-10 03:15:01

标签: java backwards-compatibility

详细说明: 如果我们使用公共API,例如,在JDK 1.4中编写java程序,如果应该在它上面的所有版本中正确运行。 1.4版本的所有更新版本,1.5,1.6和1.7?

此外,不同更新程序版本之间的可梳理性规则是什么,例如1.6.22和1.6.23哪些不能更改,哪些可以更改? 当然,公共API定义无法改变,其他人怎么样? javadoc的?内部API定义,实现?

如果有人可以就这一主题指出具体的官方文件,那就太好了。谢谢,

java文档中有一个例子,它们不打算在更新程序版本之间进行更改。见http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6475885

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

需要了解完整的故事,以便我们可以安全地升级到更大的版本。

5 个答案:

答案 0 :(得分:7)

一般规则是,根据Java X 的API编写和编译的任何代码都应Y的{​​{1}}上运行。

偶尔有例外;例如应用程序的行为取决于Java Y >= X中的某些未记录的行为(通常是错误),该行为在更高版本中得到纠正。

AFAIK,没有列出这些不兼容性的单一文件。所有Java主要版本的发行说明都包含一个可能导致旧代码破坏的更改列表。

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


  

需要了解完整的故事,以便我们可以安全地升级到更大的版本。

感觉安全是不重要的。在更高版本上彻底测试您的应用程序。这是唯一实用解决方案。如果每个不兼容性都被详尽记录,那么甚至就是这种情况。

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

没有任何抱怨在这里你认为Oracle应该以不同方式处理这个问题的方式会产生任何不同。并不是说我认为他们可以更好地处理这个问题而不改变他们的商业模式。您是否准备为保证没有版本兼容性问题的Java平台支付多少费用?

答案 1 :(得分:2)

这不是一个完整的答案,但我会补充说它会运行并且它会编译两个不同的东西。在1.5中引入的关键字将阻止编译1.4代码但字节代码运行得很好。

答案 2 :(得分:1)

几乎任何版本之间都可以更改,没有针对此类事情的设置规则。使用发行说明发布更改或在以下版本之间查看更改:

http://www.oracle.com/technetwork/java/javase/jdk7-relnotes-418459.html

通常只有错误​​修复是次要版本的原因(如详细信息1.6.22 - 1.6.23),或简单的增强功能,这些只是好东西。当主要版本号发生变化时,您可以期待更多重大更改,但仍然“希望”反向兼容。

答案 3 :(得分:1)

我认为JDK不会改变破坏向后可比性的API(无意中除外)。

他们在一开始就引入了@deprecated标签,可能认为他们将来可能需要进行一些API清理。但这从未发生过。没有删除@deprecated API或行为已更改。

答案 4 :(得分:0)

  

如果我们使用公共API,例如,在JDK 1.4中编写java程序,如果应该在其上面的所有版本中正确运行。 1.4版本的所有更新版本,1.5,1.6和1.7?