Для обобщенного типа можно объявлять более одного параметра типа. Чтобы указать два или более параметров типа, просто используйте разделенный запятыми список.
Например, следующий класс TwoGen — это вариант класса Gen, который
принимает два параметра:
// Простой обобщенный класс с двумя
// параметрами типа: Т и V.
class TwoGen<T, V> {
Т obi;
V оb2 ;
// Передать конструктору ссылки на объект типа Т и объект типа V.
TwoGen(Т ol, V о2) {
obi = ol;
оb2 = о2;
}
// Показать типы Т и V.
void showTypes() {
System.out.println("Тип T: " + obi.getClass().getNameО);
System.out.println("Тип V: " + ob2.getClass().getName());
}
T getobl() {
return obi;
}
V getob2() {
return ob2;
}
}
// Демонстрация TwoGen.
class SimpGen {
public static void main(String args[]) {
TwoGen<Integer, String> tgObj = new TwoGen<Integer, String>(88, "Обобщения");
// Показать типы.
tgObj.showTypes();
// Получить и показать значения,
int v = tgObj.getobl();
System.out.println("Значение: " + v);
String str = tgObj.getob2();
System.out.println("Значение: " + str);
}
}
Результат работы этой программы:
Тип Т: java.lang.Integer
Тип V: java.lang.String
Значение: 88
Значение: Обобщения
Обратите внимание на объявление класса TwoGen:
class TwoGen<T, V> {
Оно задает два параметра типа — Т и V, разделенные запятой. Поскольку оно имеет два параметра типа, при создании объекта класса TwoGen должны быть переданы два аргумента типа, как показано ниже:
TwoGen<Integer, String> tgObj = new TwoGen<Integer, String> (88, "Обобщения");
В этом случае класс Integer подставляется вместо параметра Т, а класс String — вместо параметра V.
Хотя два аргумента в примере отличаются, допустимо передать в параметрах два одинаковых типа.
Например, следующая строка кода вполне корректна:
TwoGen<String, String> х = new TwoGen<String, String> ("A", "В");
В этом случае оба аргумента параметров типа V и Т будут иметь тип String.
Конечно, если оба аргумента всегда будут одинаковы, то два параметра не обязательны.
