2009-08-12 115 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大多是無痛的,但勤奮的測試是所謂的。