代码之家  ›  专栏  ›  技术社区  ›  Thorbjørn Ravn Andersen

是否有Java程序片段可以在JRE 6而不是Java 6编译器上用Java 5编译器编译?

  •  11
  • Thorbjørn Ravn Andersen  · 技术社区  · 16 年前

    我想有一个源文件,它可以用JavaC/EJ集编译到Java 5,而不是Java 6(即使底层Java运行时是Java 6)。

    这是肯定的,在安装了Java 6的Eclipse 3.5中,编译器级别被正确设置,但是结果需要在Java 5安装上运行。

    对于Java 1.4,我可以使用“EnUM”作为变量名(它在Java 5和以后的Java中失败),但是我无法找到Java 5与6(以及以后)的类似方法。

    建议?

    3 回复  |  直到 14 年前
        1
  •  14
  •   oxbow_lakes    16 年前

    里面什么都没有 Java语言 那是 远离的 在JDK5和6之间。如前所述,唯一增加的是 @Override 接口方法上允许注释-无关键字。因此,恐怕只有库的不同才是破坏变化的唯一原因。

    即使在核心API中也存在;在一次不寻常的向后兼容性破坏狂欢中,他们改变了 ExecutorService 接口。这是因为方法的通用签名过于严格。这是一个 纯库更改 (尽管,作为 java.util 一个漂亮的女人 核心库 );与任何语言级别的修改无关。

    例如, from JDK5 :

    <T> T invokeAny(Collection<Callable<T>> tasks)
    

    to JDK6 以下内容:

    <T> T invokeAny(Collection<? extends Callable<T>> tasks)
    

    这意味着任何包含代码的程序 实施 JDK5中的这个接口不会根据JDK6编译。代码片段很容易创建;只需让您的IDE创建JDK5接口的空实现,然后根据JDK6进行构建。

    注: 因为以前的版本不接受类似的参数,所以添加了通配符 List<MyCallable<String>> (即,集合是由Callable的某个子类键入的),而较新版本则是这样。

        2
  •  2
  •   VonC    16 年前

    自从 JVMDI 删除Java JSE 6中的JVMPI(根据 J2SE 6.0 release note ,您可以使用该API添加代码:它不会使用J2SE6.0编译,只使用5.0。(如图所示 this thread )

        3
  •  0
  •   Andreas Dolk    16 年前

    不是对您的问题的回答,而是对您的方法的一种替代:难道不可能使用基于Ant或Maven的第二个构建器来按需创建最终的应用程序或库吗?此构建将使用真正的外部Java 5 SDK,从而保证应用程序/库在Java5环境中运行。