【问题标题】:java generic method signaturejava泛型方法签名
【发布时间】:2020-05-29 00:51:30
【问题描述】:

我对泛型方法的语法有点困惑。 阅读此post 后,我的理解是泛型方法应该这样声明:

public static <E> void printArray( E[] inputArray )

&lt;E&gt; 是一个占位符,告知 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。为什么?

【问题讨论】:

标签: java generics


【解决方案1】:

这些方法是定义在接口Stream上的实例方法,它定义了type上的type参数:

public interface Stream<T> {
  Stream<T> filter(Predicate<? super T>)
}

...所以类型参数是在接口上定义的,而不是方法上。

如您所见,在接口上定义的类型参数是在逐个方法的基础上定义的,例如map

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多