Вы можете объявить несколько параметров типа в настраиваемом типе данных. Для определения двух или нескольких параметров типа используйте список, разделенный запятыми. Например, приведенный в листинге 3.3 класс TwoGen представляет собой вариант класса Gen с двумя параметрами типа.
Листинг 3.3. Пример простого настраиваемого класса с двумя параметрами
class TwoGen {
T ob1;
V ob2;
// Передает конструктору ссыпку на
// объекты типов Т и V.
TwoGen(T o1, V o2) {
ob1 = o1;
ob2 = o2;
}
// Показывает типы Т и V.
void showTypes() {
System.out.println("Type of T is " +
ob1.getClass().getName());
System.out.println("Type of V is " +
ob2.getClass().getName());
}
T getob1() {
return ob1;
}
V getob2() {
return ob2;
}
}
// Демонстрирует использование класса TwoGen.
class SimpGen {
public static void main(String args[]) {
TwoGen tgObj =
new TwoGen(88, "Generics");
// Show the types.
tgObj.showTypes();
// Obtain and show values.
int v = tgObj.getob1();
System.out.println("value: " + v);
String str = tgObj.getob2();
System.out.println("value: " + str);
}
}
Далее приведен вывод результата работы программы из листинга 3.3.
Type of T is Java.lang.Integer
Type of V is Java.lang.String
value: 88
value: Generics
Обратите внимание на объявление класса TwoGen:
class TwoGen {
В нем задаются два параметра: T и v, разделенные запятыми. Поскольку у класса два параметра типа, при создании объекта следует передать в типе TwoGen два аргумента типа, как показано в следующих строках: TwoGen tgObj =
new TwoGen<:Integer, String>(88, "Generics");
В данном случае тип T заменяется типом Integer, а тип v — типом String. Несмотря на то, что в приведенном примере аргументы типа разные, можно применять и одинаковые аргументы. Приведенный в следующей строке код полностью корректен:
TwoGen< String, String> x = new TwoGen< String, String>("A", "B");
В этом случае и T, и V заменяются типом String. Правда, если аргументы
типа всегда одинаковы, нет необходимости использовать два параметра типа.
Общий вид объявления настраиваемого класса
Можно обобщить синтаксические конструкции, использованные в приведенных примерах. Ниже приведена синтаксическая запись для объявления настраиваемого класса.
class имя-класса<список-парамегров-типа> {//...
Далее приведена синтаксическая запись для объявления ссылки на настраиваемый класс.
class имя-класса<список-аргумеитов-типа> имя-переменной =
new имя-класса<список-аргументов-типа>(список-констант-аргументов);
|