我发现在Eclipse(使用Eclipse编译器)中,我可以使用一些Java 7语言特性,但仍然创建Java 6类文件。在下面的图片中,您可以看到两个成功编译为Java 6类文件的Java 7语言特性。然而,其他被注释掉的Java 7特性则无法编译。
我的假设是Eclipse正在确定哪些Java 7语言特性与Java 6 JVM兼容,哪些不兼容。例如,通用类型JComboBox只是一个编译(而不是运行时)特性,因此我可以想象它如何兼容。然而,我认为字符串开关功能可能会在字节码上产生差异,并依赖于新的JVM功能,但我可能错了...
我的问题:
1. Eclipse是否真的聪明到知道哪些Java 7语言特性能够编译成Java 6类文件,哪些不能?
2. 下面的示例显然不是1.6源代码兼容的,那么为什么将“源兼容性”设置为1.6不会引起错误?
3. 这个“技巧”似乎让我使用至少一些Java 7语言特性并仍然创建Java 6类文件。使用具有源1.7和目标1.6的javac将失败,那么为什么这样做有效?Eclipse编译器是否具有javac没有的功能?
为了比较,当我切换到Java 6编译器时,结果如下所示。
我的假设是Eclipse正在确定哪些Java 7语言特性与Java 6 JVM兼容,哪些不兼容。例如,通用类型JComboBox只是一个编译(而不是运行时)特性,因此我可以想象它如何兼容。然而,我认为字符串开关功能可能会在字节码上产生差异,并依赖于新的JVM功能,但我可能错了...
我的问题:
1. Eclipse是否真的聪明到知道哪些Java 7语言特性能够编译成Java 6类文件,哪些不能?
2. 下面的示例显然不是1.6源代码兼容的,那么为什么将“源兼容性”设置为1.6不会引起错误?
3. 这个“技巧”似乎让我使用至少一些Java 7语言特性并仍然创建Java 6类文件。使用具有源1.7和目标1.6的javac将失败,那么为什么这样做有效?Eclipse编译器是否具有javac没有的功能?
为了比较,当我切换到Java 6编译器时,结果如下所示。