3

对于我想做的事情,我找不到一个好的问题/标题。我对泛型不是很熟悉,所以我在理解它们的工作原理时遇到了一些问题。

假设我有一个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>)

4

1 回答 1

5
printMap(Map<?, Horse>)

或者,交替

<K> printMap(Map<K, Horse>)
于 2012-10-19T19:26:32.873 回答