理解终端操作方法的声明

时间:2017-09-12 02:06:24

标签: methods declaration return-type collectors

通常,方法的声明显示其返回类型,方法完整路径和参数。但是当我看到方法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 个答案:

答案 0 :(得分: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);
    ...
}

正如Nathan在评论中指出的那样,<R, A>表示泛型类型参数。这些将由Java编译器推断,只要它是明确的。在您的情况下,R被推断为List<Integer>A推断为Object。您可以阅读有关通用方法的here