3

やりたいことについての良い質問/タイトルが見つかりませんでした。私はジェネリックスにあまり詳しくないので、ジェネリックスがどのように機能するかを理解するのにいくつかの問題があります。

Map<k,v>キーを値にマップするクラスがあるとします。

class Map<K,V>{
    public V get(K key){
        //...
    }

    public void set(K key, V v){
        //...
    }
 }

次に、2つのサブクラスを作成します。

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 に答える