【发布时间】:2016-08-15 07:37:43
【问题描述】:
我正在通过教程练习在 JAVA 中使用 HashMap。 示例 HashMap 实现代码编译失败,报错:
DictionaryPractice.java:57: error: cannot find symbol
shoppingList.replace("Bread", Boolean.FALSE);
symbol: method replace(String,Boolean)
location: variable shoppingList of type Map<String,Boolean>
代码如下:
import java.util.HashMap;
import java.util.Map;
public class DictionaryPractice {
public static void main(String[] args) {
Map<String, Boolean> shoppingList = new HashMap<String, Boolean>();
// Put some stuff in dictionary
shoppingList.put("Ham", true);
shoppingList.put("Bread", Boolean.TRUE);
shoppingList.put("Oreos", Boolean.TRUE);
shoppingList.put("Eggs", Boolean.FALSE);
shoppingList.put("Sugar", false);
// Retrieve items
System.out.println(shoppingList.get("Ham"));
System.out.println(shoppingList.get("Oreos"));
// Remove things
shoppingList.remove("Eggs");
// Replace values for a certain key
shoppingList.replace("Bread", Boolean.FALSE);
}
}
我已阅读 HashMap 类的 JavaDocs,并确认 .replace 是一个有效的 HashMap 方法,用于替换指定键的值。但是,我不断收到cannot find symbol error。您的帮助将不胜感激。很抱歉这个基本问题。
我正在使用 jEdit 文本编辑器和安装在 MacOSX Yosemite 上的编译插件。
【问题讨论】:
-
您可以简单地覆盖该值,因为哈希映射将覆盖现有键的值 shoppingList.put("Bread", Boolean.FALSE); 将执行工作。另一个建议是不要混合类型使用 Boolean.FALSE 或简单地 false
-
@whyn0t 我认为本教程同时使用了
Boolean和boolean来演示自动装箱。存储的值完全相同。 -
@RealSkeptic 我并没有说这是错误的,这只是一个好的编程习惯
-
@whyn0t 感谢您的建议。不胜感激。
-
@RealSkeptic 你是对的。本教程在引用类型和原始类型之间变化,以演示无论您使用什么(即自动装箱)都会发生的隐式转换。非常感谢。