在1.5上编译的java代码可以运行1.4环境

时间:2016-08-25 15:35:36

标签: java generics

我有一个带有泛型实现的Java类。如果由于类型擦除我理解正确,我可以在java 1.4中运行该类文件。我试图找出1.4编译器,但无法找到。

简而言之,根据我的理解,由于编译后的类型擦除,1.4和1.5中的类文件之间没有区别。

任何人都有想法,请让我知道我的理解是否正确......

2 个答案:

答案 0 :(得分:1)

是。在泛型的上下文中,类文件没有任何区别。编译器负责泛型。一旦你有一个类文件,这意味着编译器已经通过转换类型完成了它的工作。

答案 1 :(得分:1)

没有。 Java 5编译器生成较新的类文件格式,Java 1.4 VM无法读取。

类型擦除意味着操作代码(在字节码本身内)在遗留代码和“通用”代码之间可能是相同的,但是在类文件格式中存在其他差异(并且可能存在一些新的操作码)。

将Java 5代码编译为版本为49的类文件; Java 1.4目标代码编译为版本48的类文件。版本49类文件支持注释,枚举,泛型类型签名属性,“封闭方法”属性,varargs和桥接属性等。虚拟机规范中带注释的章节显示可以找到更改here

当然,您可以使用Java 5编译器编译Java 1.4代码,并使用-source 1.4 -target 1.4命令行选项生成较旧的类文件格式。