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