Diamond Operator 在 OpenJDK 而非 SunJDK 7 下编译

Posted

技术标签:

【中文标题】Diamond Operator 在 OpenJDK 而非 SunJDK 7 下编译【英文标题】:Diamond Operator Compiles under OpenJDK but not SunJDK 7 【发布时间】:2013-02-07 15:53:03 【问题描述】:

希望这不是重复的,我已经搜索并发现了一些相关问题,但与 Java 中的差异无关。

private List<Stuff> apps = new ArrayList<Stuff>();
// compiles under both


private List<Stuff> apps = new ArrayList<>();
// compiles under OpenJDK 7
// SunJDK 7 Error raised is : Syntax error on token "<", ? expected after this token

任何想法为什么会这样?我喜欢在我的 *nix 服务器和开发盒上使用 OpenJDK,但有时我会使用别人的 Windows 笔记本电脑进行开发和测试,这是我第一次在两个版本之间遇到问题。希望有任何建议或想法!

我还使用 Netbeans 7.2(它不会在 Windows 或 Debain 上标记错误)。该程序使用 Play Framework 1.2.5,并将 java 源设置为 1.7。

javac -version
javac 1.7.0_01

java -version
java version "1.7.0_01"
Java<TM> SE Runtime-Environment <build 1.7.0_01-b08>

并在所有我能告诉的地方检查了 Netbeans 的来源是 1.7。通过命令行编译产生了与上述相同的错误。

回答?

我已更新到最新版本的 SunJDK/Java (1.7.0_13),问题已为我解决。

【问题讨论】:

它对我来说很好用。你在使用 Eclipse 吗?确保它没有完成在 Project/Build 设置中更改 Java 库或将“编译为”版本更改为 5 的魔术。我有一个令人讨厌的习惯,就是经常自己做这些事情! 同意 Spoon 先生的观点。在我的机器上工作。如果您使用 maven,请确保构建部分的 targetVersion 设置正确:maven.apache.org/plugins/maven-compiler-plugin/examples/… 对不起,我使用 Netbeans,它也有在 Windows 上切换回源 1.5 而不是 1.7 的习惯,在 Debian 上从不这样做。我修改了我的回答,说 Netbeans,如果这很重要的话。 请编辑您的问题并添加javac -versionjava -version 的输出,以及IDE 中的编译器设置。即使在使用 Java 1.7 时,您也可以通过包含 -source 1.6 来强制它以 1.6 模式编译。因此,如果您的 IDE 将此设置添加到您的构建中,它将在 Java 1.7 中失败哦,并且尝试在命令行上编译以查看它是 Java 还是 Netbeans 问题! 谢谢。我添加了请求的信息。 【参考方案1】:

我已更新到最新版本的 SunJDK/Java (1.7.0_13),问题已解决。

【讨论】:

以上是关于Diamond Operator 在 OpenJDK 而非 SunJDK 7 下编译的主要内容,如果未能解决你的问题,请参考以下文章

java9新特性-8-语法改进:钻石操作符(Diamond Operator)使用升级

Maven错误 diamond operator is not supported in -source 1.5 (use -source 7 or higher to enable diamon

不支持菱形运算符[重复]

diamond专题– 简介和快速使用

编译报错:-source 1.5 中不支持 diamond 运算符

部署Diamond