我有编译错误:
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()
应该返回一个字符串。
答案 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();