Java和“转发”兼容性问题

时间:2009-07-07 18:02:32

标签: java compatibility bytecode

我使用参数 -source 1.5 -target 1.5 编译了java版本1.6的源代码,编译器根本没有抱怨。

但是,由于缺少方法,应用程序将无法使用java 1.5运行。当然,我可以将我的一些源代码重写为1.5兼容,但我不明白的是;底部的java字节码是否应该“向前”兼容?

这些方法不是转换成字节码吗?是否可以将1.6 libs /方法(formely String.isEmpty())编译为1.5字节码并将其全部打包到存档中?

5 个答案:

答案 0 :(得分:6)

如果您的意思是基础Java库方法,那么不,这些方法在编译时不会转换为字节代码;它们已经被Sun(或第三方JVM分发器)编译为字节码并安装在您的操作系统上。它们是引用并由编译的代码使用。

答案 1 :(得分:3)

您需要的完整命令行选项包括:

java -source 1.5 -target 1.5 -bootclasspath /usr/jdk/jdk1.5.0_17/jre/lib/rt.jar

(将bootclasspath更改为您的计算机已设置。)

当然,1.6中的API增强功能不会是1.5。 1.5是其服务终止期限的大部分时间,所以你可能想要考虑1.6最小值。

答案 2 :(得分:1)

我不相信java会向后重新编译本机java代码。因此,如果您拨打1.6电话 - 您将无法在1.5

中访问它

答案 3 :(得分:1)

您可以将要编译的库更改为较旧的库。在像eclipse这样的软件包中,每个安装好的JDK都应该出现在“选择库”窗口中,你可以选择要编译的那个。

如果没有,您应该能够在ant文件或CLI编译命令中覆盖它。

如果定位较旧的JVM,则必须完成此操作,否则您可能会使用无法使用的调用。

答案 4 :(得分:1)

source参数仅使编译器检查语言语法级别(例如,如果遇到泛型,则source = 1.4会抱怨),但不会限制您仅使用指定Java版本中可用的API。

目标参数将使编译器输出类文件可以由指定版本的运行时使用,但不会(就像-source)验证任何API符合性。