【问题标题】:Type mismatch, can' t convert from element Object to String [duplicate]类型不匹配,无法从元素 Object 转换为 String [重复]
【发布时间】:2019-10-17 09:53:11
【问题描述】:

我从这个网站直接复制了这段代码:https://www.w3schools.com/java/showjava.asp?filename=demo_hashmap_loop_key

但它仍然给出了上面提到的错误:'for (String i : capitalCities.keySet())!'

有人知道如何改正这个错误吗??


import java.util.HashMap;

public class MyClass {
  public static void main(String[] args) {
    HashMap capitalCities = new HashMap();
    capitalCities.put("England", "London");
    capitalCities.put("Germany", "Berlin");
    capitalCities.put("Norway", "Oslo");
    capitalCities.put("USA", "Washington DC");

    for (String i : capitalCities.keySet()) {
      System.out.println(i);
    }
  }
}

【问题讨论】:

  • 使用HashMap<String, String> capitalCities = new HashMap<>();
  • 是的,斯劳先生,谢谢!!令人惊讶的是,在 Java 教程网站上犯了这样的错误,不是吗?
  • 我认为这是一个渲染问题。如果您查看页面源代码,您会看到它使用参数化类型,它只是没有显示<...>,可能是由于所使用的 HTML 存在一些问题。另外,如果您想了解更多关于参数化类型与原始类型的信息,请查看What is a raw type and why shouldn't we use it?
  • 这是一个渲染问题。 Firefox 中的 view-source:w3schools.com/java/showjava.asp?filename=demo_hashmap_loop_key 显示实际行是HashMap<String, String> capitalCities = new HashMap<String, String>();

标签: java string object mismatch


【解决方案1】:

您的程序将抛出以下编译错误。

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Type mismatch: cannot convert from element type Object to String

从您的代码中,capitalCities.keySet() 将返回 Set of generic type。因此,为了返回字符串集,我们可以使用以下解决方案之一。

解决方案 1:for (Object i : capitalCities.keySet()) 将 'i' 的数据类型更改为通用对象。

解决方案2:HashMap<String, String> capitalCities = new HashMap<String, String>();我们可以将map的key和value的datatype定义为String。

注意:为了代码的可读性,建议使用“解决方案2”。

【讨论】:

  • 请注意,keySet() 返回 Set<K>(或使用原始类型时返回 Set),而不是数组。
猜你喜欢
  • 2019-09-29
  • 1970-01-01
  • 2016-04-08
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
相关资源
最近更新 更多