编译错误“不兼容的类型”

时间:2015-01-28 16:03:45

标签: java iterator hashmap

我有编译错误:

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()应该返回一个字符串。

4 个答案:

答案 0 :(得分:6)

使用Iterator<String>代替Iterator

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

next()类中Iterator方法的返回类型为Object。由于您知道HashMap的密钥集类型为String,因此您需要将it.next()的结果转换为String

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

答案 3 :(得分:1)

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

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

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

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