【问题标题】:Cannot find symbol - HashMap .replace() method找不到符号 - HashMap .replace() 方法
【发布时间】: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 我认为本教程同时使用了Booleanboolean 来演示自动装箱。存储的值完全相同。
  • @RealSkeptic 我并没有说这是错误的,这只是一个好的编程习惯
  • @whyn0t 感谢您的建议。不胜感激。
  • @RealSkeptic 你是对的。本教程在引用类型和原始类型之间变化,以演示无论您使用什么(即自动装箱)都会发生的隐式转换。非常感谢。

标签: java hashmap


【解决方案1】:

Map接口中的方法replace(K,V)是Java 8中引入的新方法。

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

两种可能的解决方案是:

  1. Download a Java 8 JDK for Mac OS X 并使用它来编译您的代码。
  2. replace 替换为putreplace 方法是一种方便的方法,当您不希望将新值放入映射中时使用,如果键事先没有某些值,类似于:

    if ( shoppingList.contains("Bread") ) {
         shoppingList.put("Bread",Boolean.FALSE);
    }
    

    在你的情况下,由于你在几行之前putBread 提供了一些东西,所以replace 将是不必要的 - 你知道 Bread 在那里。所以直接用put就好了。

【讨论】:

  • 非常感谢。该问题已按照给出的说明解决。我下载并安装了适用于 Mac 的 Java 8 JDK。该程序已正确编译。
  • 注意Java7的代码应该是shoppingList.containsKey("Bread")docs.oracle.com/javase/7/docs/api/java/util/HashMap.html
  • @andr 这里不需要。
猜你喜欢
  • 2015-01-19
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多