我写了以下方法
validate(Map<String,IAnimal> map)
我想用
来称呼它dogMap = new HashMap<String,Dog>;
...
validate(dogMap)
其中Dog是Animal的继承者,
但它没有编译
如何更改它以便我可以使用后继对象调用它?
感谢。
答案 0 :(得分:4)
您可以将validate
的签名更改为:
validate(Map<String,? extends IAnimal> map)
这将允许您传递任何带有String
键的地图以及扩展或实施IAnimal
的值。
答案 1 :(得分:2)
您必须使用类型边界声明方法:
validate(Map<String,? extends IAnimal> map)
有关Java(有界)通配符的进一步说明,请参阅http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html。
答案 2 :(得分:2)
您有两种选择:
validate
的签名更改为YourReturnType validate(Map<? extends String, ? extends IAnimal> map)
(假设您不想向其中添加元素)。Map<String, IAnimal>
创建一个新的dogMap
:new HashMap<String, IAnimal>(dogMap)
并将该对象传递给validate
。