如何将Hashmap强制转换为Map

时间:2015-03-28 00:30:52

标签: java dictionary data-structures collections hashmap

我想要投射一个hashmap:

我的代码:

public class Example {

private HashMap<MyItem, Integer> items =new HashMap<MyItem, Integer>();


@Override
public Map<Item, Integer> gItems() {
    return this.items;
}

}

MyItem是一个继承自Item类的类。

这段代码给我一个编译错误。

出于manay原因,我无法使用解决方案来更改返回方法的类型。

那我怎样才能将 HashMap<MyItem, Integer> 投射到 Map<Item, Integer>

我得到的错误是: 类型不匹配:无法从HashMap<MyItem, Integer>转换为Map<Item, Integer>

并且编译器要求我改变返回方法的类型。

谢谢。

2 个答案:

答案 0 :(得分:3)

您将无法投票,因为Map<MyItem, Integer>不是Map<Item, Integer>的子类型。这在generics tutorial中有详细描述(参见泛型和子类型部分)。

在这种情况下,你可以做的是让你的函数返回Map<? extends Item, Integer>

答案 1 :(得分:1)

编辑:请参阅testinfected的答案,这是正确的/更有意义。

如果调用你的代码无法处理实现所需接口的类型,你的堆栈中可能存在更高的问题,但你可以像这样进行转换:

return (Map)this.items;