编译为1.5编写的Java代码以使用1.4 JRE?

我有一个项目使用generics和一些Java 1.5 / 6位碎片。 是否可以编译此代码以在运行1.4 JRE的系统上工作?

我使用ANT构建脚本和javac任务来编译库。 这种构建很好,而目标属性是1.5。

如果我将目标更改为1.4,则会出现以下错误:

generics are not supported in -source 1.4 (use -source 5 or higher to enable generics) 

所以我添加了一个source属性并尝试使用值5和1.5。 新错误:

 javac: source release 5 requires target release 1.5 

我是否必须完成所有代码并更改1.5内容以使其工作?

我没有使用这些解决方案,但有

  1. 的Retroweaver
  2. 指定不受支持的-target jsr14 可能有效
  3. Retrotranslator
  4. Declawer
  5. JBossRetro

您可能还会发现javac -XD-printflat很有用(但请注意不要覆盖原始来源)。

我有一个项目使用generics和一些Java 1.5 / 6位碎片。 是否可以编译此代码以在运行1.4 JRE的系统上工作?

没有。

我是否必须完成所有代码并更改1.5内容以使其工作?

是。 但是有一种方法可以使用名为Retroweaver的工具实现自动化。 虽然不能保证它能抓住一切。

我对Retrotranslator有很好的经验(retroweaver不能很好地满足我的需要,不记得到底是什么)。

它非常适合我的目的(创建Logback的JDK1.4版本)。

http://retrotranslator.sourceforge.net/

generics是通过类型擦除实现的,因此它们应该在引入generics之前工作。 但是,您将无法使用旧版本的编译器编译代码(我不知道您为什么要这样做)