我发现在Eclipse中(使用Eclipse编译器)我可以使用一些Java 7语言功能,但仍然创建Java 6类文件.在下图中,您可以看到两个成功编译为Java 6类文件的Java 7语言功能.但是,那些注释掉的Java 7功能不能编译.
我的假设是Eclipse确定哪些Java 7语言功能与Java 6 JVM兼容,哪些不兼容.例如,泛型类型JComboBox只是一个编译(而不是运行时)功能,所以我可以想象它是如何兼容的.尽管我认为切换字符串功能可能会在字节代码中产生差异并依赖于新的JVM功能,但我可能错了......
我的问题:
Eclipse真的很聪明,知道哪些Java 7语言功能能够编译成Java 6类文件而哪些不是?
以下示例显然不是1.6源兼容,那么为什么将"Source compatibility"设置为1.6不会导致错误?
这个"技巧"似乎让我使用至少一些Java 7语言功能,仍然创建Java 6类文件.使用带有源1.7和目标1.6的javac会失败,那么为什么这样做呢?Ecilpse编译器是否具有javac不具备的功能?

为了便于比较,这是我按预期切换到Java 6编译器时的结果.

我的猜测是,您关于为什么 ECJ 在设置为 Java 6 时会编译某些内容而不是其他内容的说法是正确的。泛型确实只是编译为与强制转换相同的内容,因此这可能就是如果目标设置为 java 6 时它可以工作的原因?
请参阅javac 和 Eclipse 编译器有什么区别?javac 和 ECJ 之间的其他差异。
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |