Введение в обобщения в Java
Списки строк и списки чисел уже описывают как
List<String> и List<Integer>. Отдельная
задача - написать одну и ту же логику для разных
типов элемента без копирования кода под каждый
вариант.
Пусть нужен первый элемент списка или пустое значение, если список пуст. Для строк и для чисел алгоритм совпадает, меняется только тип элемента. Здесь помогает параметр типа - имя, которое подставляется вместо конкретного типа:
class Utils {
static <T> T firstOf(List<T> list) {
return list.isEmpty() ? null : list.get(0);
}
}
Буква T в угловых скобках перед типом
возвращаемого значения объявляет параметр типа.
В сигнатуре List<T> и результат T
согласованы с этим именем - компилятор связывает
их при вызове:
void demo() {
List<String> words = List.of("api", "log");
List<Integer> nums = List.of(10, 20, 30);
System.out.println(Utils.firstOf(words));
System.out.println(Utils.firstOf(nums));
}
Для списка строк метод возвращает строку или
null, для списка чисел - число или
null. Одно объявление покрывает оба случая,
потому что T каждый раз выводится из
аргумента.