注意: 私は質問を誤解したので、この答えは質問が求めているものとは反対です。これはコミュニティウィキとして参照できるように残しておきますが、これは元の質問に答えるものではありません。
に共通のサブタイプがType1
あり、とType2
呼ばれるSuperType
場合、最初のタイプがであると言うことは? extends SuperType
機能します。
Integer
これは、とDouble
を2つのタイプとして使用し、それらの共通の祖先をNumber
次のように使用する小さな例です。
private Map<Integer, String> doSomethingForInteger() {
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(10, "Hello");
return map;
}
private Map<Double, String> doSomethingForDouble() {
HashMap<Double, String> map = new HashMap<Double, String>();
map.put(3.14, "Apple");
return map;
}
public Map<? extends Number, String> doSomething(boolean b) {
if (b)
return doSomethingForInteger();
else
return doSomethingForDouble();
}
ここで、メソッドは、渡されたに応じてdoSomething
2つのタイプのsを返します。またはメソッドによって返されます。HashMap
boolean
HashMap<Integer, String>
HashMap<Double, String>
doSomething
実際にaを呼び出すdoSomething
と、次のboolean
ように実行できます。
Map<? extends Number, String> map1 = doSomething(true);
Map<? extends Number, String> map2 = doSomething(false);
map1
で終わりますがHashmap<Integer, String>
、をmap2
取得しHashmap<Double, String>
ます。