Что означает T и U после модификаторов доступа, но до Function?
Что означает T и U после модификаторов доступа, но до Function?
static <T, U> Function<T, U> ternaryOperator
Ответы (1 шт):
Это кусок определения generic-метода, т.е. метода, где конкретные классы, с которыми он работает, определяются в зависимости от классов переданных в него значений.
Допустим, есть какой-то метод, который принимает список значений и функцию, которая должна примениться к каждому значению, определение будет примерно такое:
public static <T, U> List<U> map(List<T> list, Function<T, U> function) {
return list.stream().map(function).collect(Collectors.toList());
}
<T, U> тут просто обозначают, что в дальнейшем определении метода T, U это не названия каких-то классов, а шаблонные имена, вместо которых при вызове метода подставятся конкретные классы.
Ну и соответственно дальше эти "буквы" показывают, какие ограничения накладываются на принимаемые и возвращаемые значения.
Например, если первым параметром передать список целых (List<Integer>), то значит вторым параметром должна приниматься функция, принимающая целое число как параметр (вместо T будет конкретный класс Integer). Если передать функцию, которая принимает целое, а возвращает строку (Function<Integer, String>), значит возвращаться должен список строк (вместо U будет String).