【问题标题】:Type Conversion Error using For-Each Loop使用 For-Each 循环的类型转换错误
【发布时间】:2018-11-14 03:10:38
【问题描述】:

我的 for-each 循环出现此错误:

“类型不匹配:无法从元素类型 Object 转换为 Employee”

private static HashMap<Integer,Employee> employeeDatabase = new HashMap<Integer,Employee>();

public HashMap getEmployeeDatabase() {
    return employeeDatabase;
}

for(Employee e: c.getEmployeeDatabase().values()) 
    {
        e.print();
    }

如果重要的话 - 'Employee' 包含 int(id)、String(name)、double(salary)。当填充 HashMap 时,复制 int(id) 以用作我的 HashMap 的 Integer 键。

编辑:问题在于 getEmployeeDatabase 访问器返回原始类型,感谢那些回答的人。

对于那些想知道“c”变量的人:

Company c = new Company();

这就是它的来源。 Company 类默认构造函数使用私有方法从 Scanner 填充employeeDatabase。

【问题讨论】:

  • 返回类型 HashMap 是一个 raw 泛型。不要使用 raw 泛型。指定正确的类型参数,即HashMap&lt;Integer,Employee&gt;
  • 你能展示你的完整代码吗?

标签: java


【解决方案1】:

您的方法返回类型是raw type。不要使用原始类型

private static HashMap<Integer,Employee> employeeDatabase = new HashMap<Integer,Employee>();

public HashMap getEmployeeDatabase() {
    return employeeDatabase;
}

应该是这样的

private static Map<Integer, Employee> employeeDatabase = new HashMap<>();

public Map<Integer, Employee> getEmployeeDatabase() {
    return employeeDatabase;
}

【讨论】:

    【解决方案2】:

    当你不指定泛型时,假设是Object,那么

    public HashMap getEmployeeDatabase()
    

    其实

    public HashMap<Object, Object> getEmployeeDatabase()
    

    所以

    for(Employee e : c.getEmployeeDatabase().values()) {
        e.print();
    }
    

    不正确,因为 values() 将返回

    Collection<Object>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 2018-07-19
      • 2015-11-12
      • 1970-01-01
      相关资源
      最近更新 更多