【发布时间】:2011-10-05 16:11:18
【问题描述】:
JDK 7 的哪些特性(不包括 invokedynamic,因为它不被 java 使用)导致新的类文件版本与 JDK 6 不兼容。似乎所有特性都可以通过编译器生成胶水代码来实现。例如 switch 语句中的字符串可以使用编译器生成的重复 ifeq 语句来实现。我希望能够为编译器提供 -source 1.7 -target 1.6 标志以符合 jre 6 并同时使用 jdk 7 中的项目硬币功能。
【问题讨论】:
-
如果您使用 javap 查看字节码或使用反编译器并对使用 JDK 7 编译器生成的 .class 文件进行逆向工程,您将看到生成的代码为“try with resource”、“binary literals”、 “unsercore in literals”、“diamond operator”也是有效的 JRE 6 代码。但是multi-catch是错误的。
-
现在 JDK 7 正式出局,它显然不支持将 Java 7 源代码编译为 Java 6 类文件:
javac -source 1.7 -target 1.6 Test.java提供javac: source release 1.7 requires target release 1.7。我也有兴趣了解为什么会这样。 -
"switch 语句中的字符串可以使用重复的 ifeq 来实现"。实际上,为了提高性能,它会散列常量字符串并在开关中使用常量(通过 if 检查登陆)。这对于开发人员来说很难自己完成。