Java + Eclipse:未定义方法 computeIfAbsent(String, (<no type> k) -> {})
Java + Eclipse: The method computeIfAbsent(String, (<no type> k) -> {}) is undefined for the type
我正在使用 Eclipse(Mars.1 Release (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
Java 7 中没有方法 Map#putIfAbsent(K key, V value)
,但 Java 8 中有。参见:
在您的特定情况下,确保 Eclipse 下的项目属性(如下所述)设置为 Java 8. 您可以通过以下方式编辑它们:右键单击项目 > 属性:
- 项目属性 > Java 构建路径
- 项目属性 > Java Comiler
这是一个可能的解决方案:
如果您的 Java 构建路径针对 Java 7,请按照以下步骤更改它:
- Select JRE 系统库
- 单击位于右侧的按钮编辑...
- 使用以下选项之一
- 全局:工作区默认 JRE。确保它设置为 Java 8
- 本地:备用 JRE。选择Java 8.
设置完成后,可以继续查看Java编译器
现在,您应该 运行 您的项目没有问题。
Do I have to do this to each project individually or does it apply to all projects?
您不必为每个项目都这样做。您可以为该工作区的所有项目设置一个。
要为所有项目设置 Java 运行时环境,您可以检查安装了哪些 JRE 并更改默认值。
- 转到 Eclipse > 首选项...
- 搜索
JRE
- 检查已安装的 JRE
- 如果您最近安装的 JRE 没有出现,请使用按钮 添加... 手动添加它们。或者使用按钮 搜索....
自动添加它们
- Select 你想要的默认 JRE
如截图所示:默认情况下,勾选的JRE会添加到新创建的Java项目的构建路径中。现在所有的应该都可以了项目。
要为特定项目编辑 JRE,您可以。以下是执行此操作的步骤:
- Select目标项目,右击>属性
- Select Java 构建路径
- 编辑JRE 系统库
- 从中选择您喜欢的 JRE 版本
- 执行环境
- 备用 JRE
- 工作区默认 JRE
仅Java8.
支持
确保选中以下内容:
- 转到您的环境变量(开始 -> 在搜索框中键入环境变量)
- 确保您的 java_home 有 jdk 1.8.x 版本的 bin,并且它包含在您的路径中。 (参考你也可以看这里:Environment variables for java installation)
设置好环境变量后重启你的eclipse。未定义应该消失。
虽然您已经为 Java 8 设置了编译器设置,但您的项目仍然在其构建路径中引用 Java 7 系统库(根据问题中的 las 屏幕截图,编辑 3)。您需要 select 该系统库 (JavaSE-1.7) 并使用 Edit... 按钮来将其更改为 JavaSE-1.8) - 您在 "Edit 2" 更新中添加的那个。
如果您想知道,区别在于编译器如何为您的代码生成 .class
文件(Compiler Compliance 设置)与Java 用于编译的标准库(JRE 系统库)。这两件事是分开的,但通常配置为相互匹配。
我正在使用 Eclipse(Mars.1 Release (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
Java 7 中没有方法 Map#putIfAbsent(K key, V value)
,但 Java 8 中有。参见:
在您的特定情况下,确保 Eclipse 下的项目属性(如下所述)设置为 Java 8. 您可以通过以下方式编辑它们:右键单击项目 > 属性:
- 项目属性 > Java 构建路径
- 项目属性 > Java Comiler
这是一个可能的解决方案:
如果您的 Java 构建路径针对 Java 7,请按照以下步骤更改它:
- Select JRE 系统库
- 单击位于右侧的按钮编辑...
- 使用以下选项之一
- 全局:工作区默认 JRE。确保它设置为 Java 8
- 本地:备用 JRE。选择Java 8.
设置完成后,可以继续查看Java编译器
现在,您应该 运行 您的项目没有问题。
Do I have to do this to each project individually or does it apply to all projects?
您不必为每个项目都这样做。您可以为该工作区的所有项目设置一个。
要为所有项目设置 Java 运行时环境,您可以检查安装了哪些 JRE 并更改默认值。
- 转到 Eclipse > 首选项...
- 搜索
JRE
- 检查已安装的 JRE
- 如果您最近安装的 JRE 没有出现,请使用按钮 添加... 手动添加它们。或者使用按钮 搜索.... 自动添加它们
- Select 你想要的默认 JRE
如截图所示:默认情况下,勾选的JRE会添加到新创建的Java项目的构建路径中。现在所有的应该都可以了项目。
要为特定项目编辑 JRE,您可以。以下是执行此操作的步骤:
- Select目标项目,右击>属性
- Select Java 构建路径
- 编辑JRE 系统库
- 从中选择您喜欢的 JRE 版本
- 执行环境
- 备用 JRE
- 工作区默认 JRE
仅Java8.
支持确保选中以下内容:
- 转到您的环境变量(开始 -> 在搜索框中键入环境变量)
- 确保您的 java_home 有 jdk 1.8.x 版本的 bin,并且它包含在您的路径中。 (参考你也可以看这里:Environment variables for java installation)
设置好环境变量后重启你的eclipse。未定义应该消失。
虽然您已经为 Java 8 设置了编译器设置,但您的项目仍然在其构建路径中引用 Java 7 系统库(根据问题中的 las 屏幕截图,编辑 3)。您需要 select 该系统库 (JavaSE-1.7) 并使用 Edit... 按钮来将其更改为 JavaSE-1.8) - 您在 "Edit 2" 更新中添加的那个。
如果您想知道,区别在于编译器如何为您的代码生成 .class
文件(Compiler Compliance 设置)与Java 用于编译的标准库(JRE 系统库)。这两件事是分开的,但通常配置为相互匹配。