我正在使用Eclipse(Mars.1版本(4.5.1))并遇到以下错误:The method putIfAbsent(String, new PriorityQueue<>()) is undefined for the type
Map<String,PriorityQueue<String>>
。一切似乎都正确完成但仍然得到错误。我能错过什么?
Map<String, PriorityQueue<String>> targets = new HashMap<>();
...
for(String[] ticket: tickets) {
targets.putIfAbsent(ticket[0], new PriorityQueue<>());
}
修改 做了以下,但仍然收到错误
编辑2
添加了Java 8 SE,但仍然收到错误。
编辑3
答案 0 :(得分:0)
Java 7中没有方法Map#putIfAbsent(K key, V value)
,但Java 8中有方法。参见:
在您的特定情况下,请确保Eclipse下的项目属性(如下所述)设置为Java 8.您可以通过执行以下操作来编辑它们:右键单击项目&gt;属性:
这是一个可能的解决方案:
如果您的Java Build Path定位到Java 7,请按照以下步骤进行更改:
设置完成后,您可以继续检查Java Complier。
现在,您应该毫无问题地运行您的项目。
我是否必须单独对每个项目执行此操作,还是适用于所有项目?
您不必为每个项目执行此操作。您可以为此工作区的所有项目进行设置。
要为所有项目设置Java运行时环境,您可以检查安装了哪些JRE并更改默认项目。
JRE
如屏幕截图所示:默认情况下,已检查的JRE会添加到新创建的Java项目的构建路径中。现在所有项目都可以。
要编辑特定项目的JRE,您可以。以下是执行此操作的步骤:
答案 1 :(得分:0)
虽然您已为Java 8设置了编译器设置,但您的项目仍在其构建路径中引用Java 7系统库(根据问题中的las屏幕截图,编辑3 )。您需要选择该系统库( JavaSE-1.7 )并使用编辑... 按钮将其更改为 JavaSE-1.8 ) - 您在&#34;编辑2&#34;中添加的那个;更新
如果您想知道,不同之处在于编译器如何为您的代码生成.class
文件(编译器合规性设置)与Java标准库的版本之间的区别用于编译( JRE系统库)。这两件事是分开的,但通常配置为相互匹配。
答案 2 :(得分:-1)
仅在Java 8中支持。
确保选中以下内容:
设置环境变量后重启你的eclipse。未定义应该消失。