找不到符号--HashMap .replace()方法

Eka*_*ong 4 java hashmap

我正在练习使用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>
Run Code Online (Sandbox Code Playgroud)

这是代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了HashMap类上的JavaDocs,并确认这.replace是一个有效的HashMap方法来替换指定键的值.但是,我一直在接受cannot find symbol error.非常感谢您的帮助.对不起基本问题.
我正在使用jEdit文本编辑器和MacOSX Yosemite上安装的Compile插件.

Rea*_*tic 5

该方法replace(K,V)Map接口是Java 8引入了新的方法.

显然,您正在使用Java 7或更早版本编译代码.

两种可能的解决方案是

  1. 下载适用于Mac OS X的Java 8 JDK并使用它来编译代码.
  2. 更换replaceput.replace如果您不希望在事先没有某个值的情况下将新值放在地图中,则此方法是一种便捷方法,类似于:

    if ( shoppingList.contains("Bread") ) {
         shoppingList.put("Bread",Boolean.FALSE);
    }
    
    Run Code Online (Sandbox Code Playgroud)

    在你的情况下,因为你put之前Bread的几行,replace没有必要 - 你知道Bread就是那里.所以直接使用put.