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