通常,方法的声明显示其返回类型,方法完整路径和参数。但是当我看到方法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>
之前是一个空格,为什么它的键(如果它是一个映射?)与实际返回类型相同?
答案 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。