在Java 8的docs of the Optional类中,map
的签名如下:
public <U> Optional<U> map(Function<? super T,? extends U> mapper)
文档指出map
返回了map
映射到的类型的可选内容。这似乎与签名中的Optional<U>
相对应。但是,看起来像另一种通用返回类型:<U>
,位于Optional<U>
之前。什么意思?
答案 0 :(得分:3)
<U>
语法是Optional.map()
generic method返回的通用类型的声明。之所以需要它是因为类型U
是由map()
方法构造的,并且在Optional
类的T
类中的任何其他地方都没有使用。
答案 1 :(得分:3)
引用Oracle docs:
泛型方法是引入其自身类型参数的方法。 这类似于声明泛型类型,但类型参数的 作用域仅限于声明它的方法。静态和 允许使用非静态泛型方法以及泛型类 构造函数。
通用方法的语法包括类型参数列表, 内部尖括号,出现在方法的返回类型之前。 对于静态泛型方法,必须出现类型参数部分 在该方法的返回类型之前。
如以上引用中所述,U
是特定于map
类的Optional
方法的类型参数。因此,需要首先对其进行定义,以便可以在该方法中使用它。并且由于此新类型可以在返回类型中使用,因此我们在<U>
方法签名中将其定义为Optional<U>
之前是map
之前定义它。