首页 > 解决方案 > 泛型的返回类型,何时使用返回类型以及何时只使用 returnType?

问题描述

在泛型api中,为什么有时类型参数写在返回类型之前,有时不需要?

以以下两个 Steam API 为例

Stream<T>   limit(long maxSize)

<R> Stream<R>   map(Function<? super T,? extends R> mapper)

为什么Stream.limit返回类型只能写成Stream<T>而不是<T> Stream<T>

何时使用<T> returnType <T>,何时使用returnType<T>

标签: javagenericsreturn-type

解决方案


T一个示例中的泛型参数是Stream正在操作的泛型参数,因此limit(...)返回一个Stream与调用的流相同的泛型类型的新参数limit(...)

在第二个例子中,结果的泛型类型Stream可能会改变,因此需要一个单独的泛型参数。在这种情况下,结果的类型Streammapper-lambda 的影响。例如,如果Persons 映射到它们SocialSecurityNumber的 ,那么初始Stream值将是 a Stream<Person>, themapper将是 typeFunction<Person, SocialSecurityNumber>并且结果Stream将是 a Stream<SocialSecurityNumber>


推荐阅读