EclipseJava-将编译器设置为Java6,但仍然有Java7方法/库,并且没有任何抱怨

EclipseJava-将编译器设置为Java6,但仍然有Java7方法/库,并且没有任何抱怨,java,eclipse,compatibility,Java,Eclipse,Compatibility,对于一个项目,我必须使用Java6,所以我将eclipse编译器设置为1.6(JDK遵从性级别) 然而,我包括了java.nio.file.Files,这是一个Java7库,我没有收到任何抱怨。我可以确保我的项目特定设置设置为1.6。我甚至把我的整个工作空间改成了1.6并重建了,仍然没有抱怨。我的同事在java.nio.xml文件上看到了投诉 是不是因为我有一个jdk7,它可以识别java.nio.file.Files,即使设置为1.6 spcs?JDK符合性级别是java语法的级别,而不是运行

对于一个项目,我必须使用Java6,所以我将eclipse编译器设置为1.6(JDK遵从性级别)

然而,我包括了
java.nio.file.Files
,这是一个Java7库,我没有收到任何抱怨。我可以确保我的项目特定设置设置为1.6。我甚至把我的整个工作空间改成了1.6并重建了,仍然没有抱怨。我的同事在java.nio.xml文件上看到了投诉

是不是因为我有一个jdk7,它可以识别
java.nio.file.Files
,即使设置为1.6 spcs?

JDK符合性级别是java语法的级别,而不是运行时库。它只会阻止您使用JDK 7中引入的try with resources等更高版本中引入的语言特性


如果要为JDK6开发,需要使用JDK6。

这是两件不同的事情:

  • 合规性级别是关于编写Java代码时可以使用的语法(分别是关于放入编译字节码中的Java版本号)
  • 但是可用的库取决于项目使用的JDK
换句话说:如果您确实想将项目限制为Java 6库,那么您必须在系统上安装Java 6 JDK,并在项目设置中指出这一点(最有可能的是,您当前的项目设置使用了比Java-6 JDK更新的JDK)


还有一个常见的免责声明:Java6在很多年前就已经寿终正寝了。您应该尽一切可能升级您的设置。

Java6能够解释
Java.nio.file.Files
,因为与Java7和Java8(lambda表达式等)相比,没有特殊的Java7语法。因此,您正在开发标准库。卸载Java 7 JDK并安装Java 6 JDK,您将发现
Java.nio.file.Files
不再可用。

通过“编译器设置”,您实际上是指JDK合规性级别吗?@Mena是的,。项目已选中“启用项目特定设置”,并将符合性设置为JavaSE-1.6是。您应该始终使用与Java版本匹配的运行时库,以便方法签名在运行时匹配。您需要安装Java6。通过在安装程序中取消选择JRE,您可以单独安装Java 6 JDK编译。其思想是,这不会破坏Java6语法。现在如果我使用lambdas,它显然不会编译。@GhostCat没问题,谢谢你快速而准确的回复!