JDK,JRE兼容JAR

Igo*_*din 12 java compatibility

我对JDK和JRE源代码和二进制兼容性(例如thisthis)有所了解,但不确定以下情况:

考虑我有一个使用JDK5编译并在JRE6上运行的应用程序.它使用一些库(jar),它们也使用JDK5编译.

现在我想使用JDK6编译我的应用程序.在这种情况下运行时会出现哪些新问题(特别是与"旧"罐的兼容性)?我应该完全重新测试应用程序(触摸每个库)还是可以依赖于承诺的JDK/JRE兼容性?

Fer*_*lez 9

通常,如果将JDK6的编译器选项设置为使用1.5源兼容性,则不会出现任何问题.然而,有时这并非总是如此.

我记得曾经用1.5编译器编译1.4代码(使用1.4兼容性).好的罐子(1.4二进制级别)但应用程序由于有趣的转换而崩溃.

我们使用BigDecimal数字将一个整数作为参数传递给构造函数.在1.4版本,从只有一个构造函数double,但1.5版本有两个,在intdouble建设者.因此,当使用1.4编译器进行编译时,自动转换intdouble,但是使用1.5编译器检查int构造函数是否存在并且没有实现转换.然后当在1.4 JRE上使用完美的二进制兼容代码时,程序崩溃了NoSuchMethodException.

我不得不承认这是一个奇怪的案例,但这是逻辑不起作用的案例之一.所以我的建议是,如果您计划编译旧版本的JRE,请尝试尽可能使用目标版本JDK.


小智 2

除非您没有更改代码并添加新的 Java 6 功能,否则应该不会有任何问题。至于其他罐子应该没有任何问题。JDK始终保持向后兼容性。