请注意: 我误解了这个问题,所以这个答案与问题的要求相反。我将把它作为社区 wiki 留作参考,但这并不能回答最初的问题。
Type1
如果和Type2
调用有一个共同的子类型SuperType
,那么说第一个类型是? extends SuperType
可行的。
这是一个使用Integer
andDouble
作为两种类型的小例子,它们的共同祖先是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();
}
在这里,该方法将根据传入的 sdoSomething
返回两种类型的s。要么要么由方法返回。HashMap
boolean
HashMap<Integer, String>
HashMap<Double, String>
doSomething
实际上调用doSomething
aboolean
可以这样完成:
Map<? extends Number, String> map1 = doSomething(true);
Map<? extends Number, String> map2 = doSomething(false);
map1
会结束Hashmap<Integer, String>
,而map2
会得到Hashmap<Double, String>
。