是否有一个Java程序片段可以使用JRE 6上的Java 5编译器进行编译,但不能编译Java 6编译器?

Tho*_*sen 11 java eclipse compiler-construction

我希望有一个源文件可以编译,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(及更高版本)的方法.

建议?

oxb*_*kes 14

有没有在Java语言中去除 JDK5和6向其中加入,我们已说过的唯一的事情之间,被@Override标注为接口方法上允许的-没有关键字.因此,我担心库存差异是导致改变的唯一原因.

即使在核心API中也存在这些; 在一个不寻常的向后兼容性破坏狂欢中,他们改变了ExecutorService界面上某些方法的签名.这是因为这些方法的通用签名过于严格.这是一个纯粹的库更改(虽然,它是java.util一个非常核心的库的一部分); 与任何语言级别的修改无关.

例如,来自JDK5:

<T> T invokeAny(Collection<Callable<T>> tasks)
Run Code Online (Sandbox Code Playgroud)

到JDK6:

<T> T invokeAny(Collection<? extends Callable<T>> tasks)
Run Code Online (Sandbox Code Playgroud)

这意味着任何包含在JDK5中实现此接口的代码的程序都不会针对JDK6进行编译.一个片段很容易创建; 让你的IDE创建一个JDK5接口的空实现,然后针对JDK6构建.

注意:添加了通配符是因为之前的版本不会接受类似的参数List<MyCallable<String>>(即集合由某些可调用的子类类型化),而后一版本则可以.