我对JDK和JRE源代码和二进制兼容性(例如this和this)有所了解,但不确定以下情况:
考虑我有一个使用JDK5编译并在JRE6上运行的应用程序。它使用一些库(jar),它们也使用JDK5编译。
现在我想使用JDK6编译我的应用程序。在这种情况下运行时会出现哪些新问题(特别是与“旧”罐的兼容性)?我应该完全重新测试应用程序(触摸每个库)还是可以依赖于承诺的JDK / JRE兼容性?
答案 0 :(得分:2)
直到除非您没有更改代码并添加新的Java 6功能,否则应该没有问题。 关于其他罐子,应该没有任何问题。 JDK始终保持向后兼容性。
答案 1 :(得分:2)
兼容性大多有效。除了各种警告之外,我不希望出现任何问题。不使用泛型。也许一些勉强使用的API已被弃用,但我认为它们已经保留,只是标记为已弃用。
试试吧,如果它编译你应该就好了。
Java的一个关键设计方面 - 遗憾的是 - 完全向后兼容。
很少有例外,其中不保留向后兼容性;当排序算法从稳定排序算法变为非稳定排序算法时,Eclipse最突出的是(不再保留相同排序的对象的顺序);但这绝不是Java规范的一部分,而是Eclipse中的一个错误。
这很不幸,因为有一些糟糕的选择现在无法改变。 Iterator
在API中不应该有remove()
函数,Vector
不应该已经同步(现在通过ArrayList
解决),StringBuffer
不应该有已同步,因此StringBuilder
。 String
应该是一个接口,而不是一个类,以允许例如8位字符串,32位字符串 - CharSequence
是更好的字符串接口,但是太多方法不接受CharSequence
并且需要返回String
。 Observable
也应该是一个接口:您无法使用此API创建子类可观察。仅举几例。但由于向后兼容性,这些不能再修复,直到可能JDK模块化(此时有些可能至少会消失在donotuse模块中......)。
当然,您应该已经有数以千计的单元测试来帮助您使用新的JDK进行测试...: - )