Несколько параметров
Конструкция <K, V> позволяет объявить обобщенный
класс, интерфейс или метод сразу с несколькими
типами-параметрами. Первым параметром обычно
указывают тип ключа K (от англ. key), вторым -
тип значения V (от англ. value). При создании
объекта вместо K и V подставляются
конкретные типы, например String и Integer.
Количество параметров может быть любым, но на
практике чаще всего используют два или три.
Синтаксис
class ClassName<K, V>
{
// ...
}
Пример
Давайте создадим обобщенный класс Pair с двумя
типами-параметрами K и V и сохраним в
него пару значений:
public class Main
{
public static void main(String[] args)
{
Pair<String, Integer> pair = new Pair<>("abcde", 12345);
System.out.println(pair.getKey());
System.out.println(pair.getValue());
}
}
class Pair<K, V>
{
private K key;
private V value;
public Pair(K key, V value)
{
this.key = key;
this.value = value;
}
public K getKey()
{
return key;
}
public V getValue()
{
return value;
}
}
Результат выполнения кода:
"abcde"
12345
Пример
Давайте создадим обобщенный метод с двумя
типами-параметрами K и V, который
принимает два аргумента и выводит их на экран:
public class Main
{
public static void main(String[] args)
{
print("abcde", 12345);
print(1, "12345");
}
public static <K, V> void print(K key, V value)
{
System.out.println(key + " -> " + value);
}
}
Результат выполнения кода:
"abcde -> 12345"
"1 -> 12345"
Пример
Давайте создадим класс MapEntry с тремя
типами-параметрами K, V и N и
сохраним в него ключ, значение и номер записи:
public class Main
{
public static void main(String[] args)
{
MapEntry<String, Integer, Integer> entry = new MapEntry<>("abcde", 12345, 1);
System.out.println(entry.getKey());
System.out.println(entry.getValue());
System.out.println(entry.getNumber());
}
}
class MapEntry<K, V, N>
{
private K key;
private V value;
private N number;
public MapEntry(K key, V value, N number)
{
this.key = key;
this.value = value;
this.number = number;
}
public K getKey()
{
return key;
}
public V getValue()
{
return value;
}
public N getNumber()
{
return number;
}
}
Результат выполнения кода:
"abcde"
12345
1
Смотрите также
-
раздел
Параметр типа,
который описывает объявление одного типа-параметра -
раздел
Параметры типа,
который описывает объявление нескольких типов-параметров -
раздел
Обобщенный метод,
который описывает методы с типами-параметрами -
раздел
Алмазный оператор,
который упрощает создание обобщенных объектов