Igo*_*din 12 java compatibility
我对JDK和JRE源代码和二进制兼容性(例如this和this)有所了解,但不确定以下情况:
考虑我有一个使用JDK5编译并在JRE6上运行的应用程序.它使用一些库(jar),它们也使用JDK5编译.
现在我想使用JDK6编译我的应用程序.在这种情况下运行时会出现哪些新问题(特别是与"旧"罐的兼容性)?我应该完全重新测试应用程序(触摸每个库)还是可以依赖于承诺的JDK/JRE兼容性?
通常,如果将JDK6的编译器选项设置为使用1.5源兼容性,则不会出现任何问题.然而,有时这并非总是如此.
我记得曾经用1.5编译器编译1.4代码(使用1.4兼容性).好的罐子(1.4二进制级别)但应用程序由于有趣的转换而崩溃.
我们使用BigDecimal数字将一个整数作为参数传递给构造函数.在1.4版本,从只有一个构造函数double,但1.5版本有两个,在int和double建设者.因此,当使用1.4编译器进行编译时,自动转换int为double,但是使用1.5编译器检查int构造函数是否存在并且没有实现转换.然后当在1.4 JRE上使用完美的二进制兼容代码时,程序崩溃了NoSuchMethodException.
我不得不承认这是一个奇怪的案例,但这是逻辑不起作用的案例之一.所以我的建议是,如果您计划编译旧版本的JRE,请尝试尽可能使用目标版本JDK.
| 归档时间: |
|
| 查看次数: |
3468 次 |
| 最近记录: |