Для обобщенного типа можно объявлять более одного параметра типа. Чтобы указать два или более параметров типа, просто используйте разделенный запятыми список.
Скачать исходники для статьи можно ниже
[sape]
Например, следующий класс 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.
Конечно, если оба аргумента всегда будут одинаковы, то два параметра не обязательны.