我想要投射一个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>
并且编译器要求我改变返回方法的类型。
谢谢。
答案 0 :(得分:3)
您将无法投票,因为Map<MyItem, Integer>
不是Map<Item, Integer>
的子类型。这在generics tutorial中有详细描述(参见泛型和子类型部分)。
在这种情况下,你可以做的是让你的函数返回Map<? extends Item, Integer>
答案 1 :(得分:1)
编辑:请参阅testinfected的答案,这是正确的/更有意义。
如果调用你的代码无法处理实现所需接口的类型,你的堆栈中可能存在更高的问题,但你可以像这样进行转换:
return (Map)this.items;