我希望有一个源文件,可以将javac / ecj设置为Java 5而不是Java 6(即使底层Java运行时是Java 6)也可以编译。
这是确定在安装了Java 6的Eclipse 3.5中正确设置了编译器级别,但结果需要在Java 5安装上运行。
对于java 1.4,我可以使用“enum”作为变量名称(在Java 5及更高版本中失败)但是我找不到类似于Java 5与6(及更高版本)的方法。
建议?
我希望有一个源文件,可以将javac / ecj设置为Java 5而不是Java 6(即使底层Java运行时是Java 6)也可以编译。
这是确定在安装了Java 6的Eclipse 3.5中正确设置了编译器级别,但结果需要在Java 5安装上运行。
对于java 1.4,我可以使用“enum”作为变量名称(在Java 5及更高版本中失败)但是我找不到类似于Java 5与6(及更高版本)的方法。
建议?
什么都没有 Java语言 那是 去除 在JDK5和6之间。如前所述,唯一添加的是 @Override
接口方法允许注释 - 没有关键字。因此,我担心库存差异是导致改变的唯一原因。
即使在核心API中也存在这些;在一个不寻常的向后兼容性破坏狂欢中,他们改变了一些方法的签名 ExecutorService
接口。这是因为这些方法的通用签名过于严格。这是一个 纯图书馆改变 (虽然,作为一部分 java.util
, 一个漂亮 核心库);与任何语言级别的修改无关。
例如, 来自JDK5 :
<T> T invokeAny(Collection<Callable<T>> tasks)
<T> T invokeAny(Collection<? extends Callable<T>> tasks)
这意味着任何包含代码的程序 实施 JDK5中的这个接口,不会针对JDK6进行编译。一个片段很容易创建;让你的IDE创建一个JDK5接口的空实现,然后针对JDK6构建。
注意: 添加了通配符,因为以前的版本不会接受像这样的参数 List<MyCallable<String>>
(即,由可调用的某些子类键入集合),而后一版本可以。
以来 JVMDI 已被删除,JVMPI在Java SE 6中被禁用(根据 J2SE 6.0发行说明),您可以使用该API添加代码:它不会使用J2SE 6.0编译,只能使用5.0。 (如图所示 这个帖子)
不是您的问题的答案,而是您的方法的替代方案:是否可以使用您根据需要创建最终应用程序或库的基于ant或maven的第二个构建器?此构建将使用真正的外部Java 5 SDK,从而保证应用程序/库在Java5环境中运行。