Java文档显示具有两个单独的泛型返回类型的函数签名吗?

时间:2019-04-04 12:31:13

标签: java optional

在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>之前。什么意思?

2 个答案:

答案 0 :(得分:3)

<U>语法是Optional.map() generic method返回的通用类型的声明。之所以需要它是因为类型U是由map()方法构造的,并且在Optional类的T类中的任何其他地方都没有使用。

答案 1 :(得分:3)

引用Oracle docs

  

泛型方法是引入其自身类型参数的方法。   这类似于声明泛型类型,但类型参数的   作用域仅限于声明它的方法。静态和   允许使用非静态泛型方法以及泛型类   构造函数。

     

通用方法的语法包括类型参数列表,   内部尖括号,出现在方法的返回类型之前。   对于静态泛型方法,必须出现类型参数部分   在该方法的返回类型之前。

如以上引用中所述,U是特定于map类的Optional方法的类型参数。因此,需要首先对其进行定义,以便可以在该方法中使用它。并且由于此新类型可以在返回类型中使用,因此我们在<U>方法签名中将其定义为Optional<U>之前是map之前定义它。