2009-08-12 113 views
3

如果我将使用Java 5代码的应用程序编译为字节码,是能够在Java 1.4下运行的结果.class文件吗?Java字节码是否与不同版本的Java兼容?

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

回答

6

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

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

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

编辑:我发现这个好资源:Using Java 5 language features in earlier JDKs

+0

我给你那个Link to retroweaver/retrotranslator的答案。这可能会照顾我的后续问题,谢谢。 – 2009-08-12 15:45:30

+1

我发现retrotranslator与我的应用程序完美地工作,我有retroweaver一些问题。 – 2009-08-12 16:28:46

3

号只能向上发展 - Java的字节码1.4将在Java 5中运行时的工作。但是,如果您没有使用Java 1.4中未找到的任何功能,则可以使用-target-sourceoptions of javac进行编译。

如果您想使用Java 5编写可在Java 4上运行的应用程序,则不能使用任何features that weren't present before Java 5

2

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

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

一般来说,我发现移动到1.5大多是无痛的,但勤奋的测试是所谓的。