Понимать объявление метода работы терминала
Обычно объявление метода показывает его тип возвращаемого значения, полный путь к методу и параметры. Но когда я смотрю на метод 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
, Вы можете прочитать здесь об общих методах.