2016-08-25 30 views
0

我有一個帶泛型實現的Java類。如果由於類型擦除我可以正確理解,我可以在java 1.4中運行該類文件。我試圖找出1.4編譯器,但無法找出。遵從1.5的java代碼可以運行1.4環境

簡而言之,根據我的理解,由於編譯後的類型擦除,在1.4和1.5版本中編譯的類文件之間沒有區別。

任何一個有想法,請讓我知道我的理解是否正確?

+0

泛型被添加到JDK 5.如果你打算在JDK 4中使用它們,你將不得不使用一些庫。更好的建議是不要使用4或5.現在的版本是JDK 8.你應該升級所有可能的速度。 – duffymo

+0

@duffymo但是不是關於Java 5中的_class_文件是否能夠在Java 4 JVM上運行的問題? –

+2

如果您願意,您可以指定編譯器的'-source'和'-target'。 –

回答

1

是。在泛型上下文中,類文件沒有任何區別。編譯器負責泛型。一旦你有了一個類文件,這意味着編譯器已經通過轉換類型完成了它的工作。

+0

類文件是不同的版本。 J2SDK 1.4 VM不會從包含泛型類型的源中加載由Java 5編譯器生成的類文件。 – davmac

1

否。Java 5編譯器生成Java 1.4 VM無法讀取的更新的類文件格式。

類型擦除意味着操作代碼(在字節碼本身內)在遺留代碼和「基因化」代碼之間可能是相同的,但是類文件格式還有其他不同之處(並且可能有一些新的操作碼)。

Java 5代碼被編譯爲版本爲49的類文件; Java 1.4目標代碼編譯爲版本爲48的類文件。版本49類文件支持註釋,枚舉,通用類型簽名屬性,「封閉方法」屬性,可變參數和橋接屬性等。虛擬機規範中的註釋章節顯示可以找到更改here

您當然可以使用Java 5編譯器編譯Java 1.4代碼並使用-source 1.4 -target 1.4命令行選項生成較舊的類文件格式。

+0

非常感謝,明白了你的觀點.... :-) – Sujoy