使用 for-each 迭代

Iterating using for-each

for (String str : m.keySet()) {//this works fine

    }

Set set = m.keySet();
for (String str : set) {//Type mismatch: cannot convert from element type Object to String

    }

两者都在做同样的事情,即遍历 Set 对象的 Keys(String) 而不是我在第二个代码中出错的原因。

您不应使用原始 Set 类型,因为在那种情况下 Set 的元素将被假定为 Object 类型。

相反,指定 Set 包含的元素类型:

Set<String> set = m.keySet();
for (String str : set) {

}

这是因为 Set 不知道要使用哪种类型,所以它会抛出异常,您必须使用 String 作为它的通用提要。就像下面的片段

Set<String> set = m.keySet();