编译错误 "incompatible types"

Compile error "incompatible types"

我有编译错误:

Error: incompatible types: Object cannot be converted to String.

String buf = it.next();

public String getMostFrequentColor() {
    HashMap<String, Integer> colors = countColors();
    int count = 0;
    String mfcolour;
    Iterator it = colors.keySet().iterator();
    while (it.hasNext()) {
        String buf = it.next();
        if (colors.get(buf) > count) {
            count = colors.get(buf);
            mfcolour = buf;
        }
    }

    return mfcolour;
}

我不知道为什么会这样。在我看来,it.next() 应该 return 一个字符串。

使用 Iterator<String> 代替 Iterator

Iterator<String> it = colors.keySet().iterator();

Iteratorclass中next()方法的return类型是Object。由于您知道 HashMap 具有类型为 String 的密钥集,因此您需要将 it.next() 的结果转换为 String:

String buf = (String) it.next();

您使用的 Iterator 没有通用参数。这意味着它将 return Object 类型。修改其声明(通过将 Iterator it 变为 Iterator<String> it)或手动转换由 it.next().
检索到的对象 后者可能会受到类型安全问题的影响!

尝试转换 String 以防止在编译时出现此问题。编译器给你这个警告只是因为 Java 是一种严格类型的语言。在 运行 的时候,如果不能转换变量,那么你只会 运行 出问题。

String buf = (String) it.next();

或者您可以通过指定要使用的 Iterator 类型使其更具体。这可能是更好的选择。

Iterator<String> it = colors.keySet().iterator();