Обратите внимание: Я неправильно понял вопрос, так что этот ответ противоположен тому, о чем вопрос спрашивает. Я оставлю это для справки в вики сообщества, но это не отвечает на первоначальный вопрос.
Если бы существовал общий подтип для Type1
и Type2
, называемый SuperType
, тогда было бы сказано, что первый тип - ? extends SuperType
.
Вот небольшой пример, в котором Integer
и Double
используются в качестве двух типов, а их общий предок - 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
вернет два типа HashMap
с в зависимости от переданного boolean
. Метод doSomething
возвращает HashMap<Integer, String>
или HashMap<Double, String>
.
На самом деле вызов doSomething
с boolean
может быть выполнен следующим образом:
Map<? extends Number, String> map1 = doSomething(true);
Map<? extends Number, String> map2 = doSomething(false);
map1
закончится с Hashmap<Integer, String>
, а map2
получит Hashmap<Double, String>
.