【发布时间】:2010-11-19 00:16:42
【问题描述】:
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行?
如果后者可以工作,并且我正在尝试在我的 Java 1.4 应用程序中使用 Java 5 框架,是否有我应该注意的事项?
【问题讨论】:
标签: java jvm compatibility bytecode java1.4
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行?
如果后者可以工作,并且我正在尝试在我的 Java 1.4 应用程序中使用 Java 5 框架,是否有我应该注意的事项?
【问题讨论】:
标签: java jvm compatibility bytecode java1.4
不! .class 文件仅向前兼容。 Java 5 引入了新的类文件属性和格式更改,以处理可变参数、枚举和泛型。 Java 4 在处理这些时会失败。
但是,javac 上有不受支持的 -target jsr14 选项,它会为某些 Java 5 语言功能生成与 JDK 1.4 兼容的字节码。
此外,还有一些项目(例如 Retroweaver、Retrotranslator)将 Java 5 类文件转换为 Java 4 文件。
编辑:我找到了这个好资源:Using Java 5 language features in earlier JDKs
【讨论】:
没有。您只能向上移动 - Java 1.4 字节码将适用于 Java 5 运行时。但是,如果您没有使用 Java 1.4 中没有的任何功能,则可以使用 -target 和 -source options of javac 进行编译。
如果你想使用 Java 5 编写一个可以在 Java 4 上运行的应用程序,你不能使用任何features that weren't present before Java 5。
【讨论】:
不,他们不是。 .class 文件仅向前兼容。
Java5 框架意味着您的库可能使用了与您的 1.4 环境不兼容的泛型或注释。您必须评估在 1.5 JVM 下运行 1.4 应用程序以启用所需框架的使用风险有多大。
总的来说,我发现迁移到 1.5 几乎没有痛苦,但需要进行勤奋的测试。
【讨论】: