我安装了 Java 7,但将我的项目 JDK 合规性设置为 Java 6。不幸的是,这与使用 Java 6 编译不同。
例如,接口在 Java 7 中javax.imageio.stream.ImageInputStream
扩展Closable
,而在 Java 6 中并非如此。在我的设置下使用ImageInputStream
where aClosable
可以很好地编译(Java 7 符合 Java 6),但在使用 Java 6 时会出现编译错误。这是假设的吗要这样吗?
我安装了 Java 7,但将我的项目 JDK 合规性设置为 Java 6。不幸的是,这与使用 Java 6 编译不同。
例如,接口在 Java 7 中javax.imageio.stream.ImageInputStream
扩展Closable
,而在 Java 6 中并非如此。在我的设置下使用ImageInputStream
where aClosable
可以很好地编译(Java 7 符合 Java 6),但在使用 Java 6 时会出现编译错误。这是假设的吗要这样吗?
为了为较旧的 JRE 编译 Java 代码,您需要做两件事:
您已经涵盖了第一点,但没有涵盖第二点,因此您的问题。
如何执行此操作取决于您的构建环境。
javac
,使用 option -bootclasspath
。示例:(javac -target 1.5 -bootclasspath jdk1.5.0/lib/rt.jar OldCode.java
来自javac 联机帮助页的“交叉编译选项”部分)。您设置的 JDK 合规性主要是类格式。
类的字节码格式有几次演变。JDK 可以以以前的格式编译,而 VM 不能执行以更新的格式编译的类。
但是使用的库始终是您用于执行的 JDK 中可用的库。javax.imageio.stream.ImageInputStream 的 JDK 6 版本未与 Java 7 捆绑在一起。
bootclasspath
编译时使用该选项。我认为如果进行交叉编译,JDK 7 会警告不要这样做。