Понимать объявление метода работы терминала

Обычно объявление метода показывает его тип возвращаемого значения, полный путь к методу и параметры. Но когда я смотрю на метод java.util.stream.Stream.collect Я сбит с толку.

Похоже, что метод имеет два типа возврата:

<List<Integer>, Object> List<Integer> java.util.stream.Stream.collect(Collector<? super Integer, Object, List<Integer>> collector)

Я понимаю, что его реальный тип возврата List<Integer>, но что делает <List<Integer>, Object> имею в виду? Почему это один пробел перед List<Integer> и почему его ключ (если это карта?) совпадает с реальным типом возврата?

1 ответ

Решение

Посмотрите на объявление метода:

public interface Stream<T> extends BaseStream<T, Stream<T>> {
    ...
    /* ...
     * @param <R> the type of the result
     * @param <A> the intermediate accumulation type of the {@code Collector}
     * ...
     */
    <R, A> R collect(Collector<? super T, A, R> collector);
    ...
}

Как отметил Натан в комментариях, <R, A> обозначает параметры универсального типа. Они будут выведены компилятором Java, если он однозначен. В твоем случае R было выведено List<Integer> а также A в Object, Вы можете прочитать здесь об общих методах.

Другие вопросы по тегам