【问题标题】:Is Java bytecode compatible with different versions of Java?Java字节码是否兼容不同版本的Java?
【发布时间】:2010-11-19 00:16:42
【问题描述】:

如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行?

如果后者可以工作,并且我正在尝试在我的 Java 1.4 应用程序中使用 Java 5 框架,是否有我应该注意的事项?

【问题讨论】:

    标签: java jvm compatibility bytecode java1.4


    【解决方案1】:

    不! .class 文件仅向前兼容。 Java 5 引入了新的类文件属性和格式更改,以处理可变参数、枚举和泛型。 Java 4 在处理这些时会失败。

    但是,javac 上有不受支持的 -target jsr14 选项,它会为某些 Java 5 语言功能生成与 JDK 1.4 兼容的字节码。

    此外,还有一些项目(例如 RetroweaverRetrotranslator)将 Java 5 类文件转换为 Java 4 文件。

    编辑:我找到了这个好资源:Using Java 5 language features in earlier JDKs

    【讨论】:

    • 我给了你这个链接到 retroweaver/retrotranslator 的答案。这可能会解决我的后续问题,谢谢。
    • 我发现 retrotranslator 可以完美地与我的应用程序配合使用,但我在使用 retroweaver 时遇到了一些问题。
    【解决方案2】:

    没有。您只能向上移动 - 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

    【讨论】:

      【解决方案3】:

      不,他们不是。 .class 文件仅向前兼容。

      Java5 框架意味着您的库可能使用了与您的 1.4 环境不兼容的泛型或注释。您必须评估在 1.5 JVM 下运行 1.4 应用程序以启用所需框架的使用风险有多大。

      总的来说,我发现迁移到 1.5 几乎没有痛苦,但需要进行勤奋的测试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-11
        • 2018-10-18
        • 2012-11-30
        • 1970-01-01
        • 2011-07-08
        • 1970-01-01
        • 2020-02-07
        相关资源
        最近更新 更多