我对泛型方法的语法有点困惑。读完这篇文章后我的理解是通用方法应该这样声明:
public static <E> void printArray( E[] inputArray )
作为<E>占位符,告知 E 是泛型类型
那么为什么我会在javadoc中找到这样的内容:
Stream<T> filter(Predicate<? super T> predicate)
没有占位符?我本来期望
<T> Stream<T> filter(Predicate<? super T> predicate)
以及为什么
<R> Stream<R> map(Function<? super T,? extends R> mapper)
这次有一个占位符,但只用于 R,不用于 T。为什么?
这些方法是在接口上定义的实例方法,它定义了类型Stream的类型参数:
public interface Stream<T> {
  Stream<T> filter(Predicate<? super T>)
}
...因此类型参数是在接口上定义的,而不是在方法上定义的。
正如您所注意到的,在map.