【发布时间】:2012-10-19 19:20:19
【问题描述】:
我找不到合适的问题/标题来说明我想做的事情。我对泛型不是很熟悉,所以在理解它们的工作原理时有些问题。
假设我有一个将键映射到值的 Map<k,v> 类。
class Map<K,V>{
public V get(K key){
//...
}
public void set(K key, V v){
//...
}
}
然后,我创建了两个子类:
class SuperMap<K,V> extends Map<K,V>{ /* ... */ }
class HyperMap<K,V> extends Map<K,V>{ /* ... */ }
我想要的是创建一个函数,它可以采用任何映射并打印每个键和值的字符串表示。所以我可以:
SuperMap<Unicorn, Horse> unicornsMap = ....;
HyperMap<Pegasus, Horse> pegasusMap = ....;
printMap(unicornsMap);
printMap(pegasusMap);
那么,printMap 函数签名应该是什么?
我尝试过:void printMap(Map<Object, Horse>) 但它不起作用:
MainClass 类型中的方法
printMap(Map<Object,Horse>)不是 适用于参数 (HyperMap<Pegasus,Horse>)MainClass 类型中的方法
printMap(Map<Object,String>)不是 适用于参数 (SuperMap<Unicorn,Horse>)
【问题讨论】:
-
你想创建一个函数来接受 any 映射(包括
HashMap、TreeMap和Map本身)还是只接受HyperMap的函数和SuperMap? -
我认为
void printMap(SuperMap<Object, Horse>)不适用于第一个。你能检查和编辑吗? -
@Pache,你是对的。我不记得我尝试过的中间解决方案似乎适用于其中一种但不适用于另一种。已编辑。
标签: java generics inheritance