Java中的这种泛型用法是什么?X. <Y>()的方法

Seb*_*ber 18 java generics scjp type-inference

我已经阅读了整本SCJP6书籍Sierra和Bates的书,考试成绩为88%.

但是,我仍然没有听说过这种代码是如何工作的,因为它在泛型章节中没有解释:

Collections.<TimeUnit>reverseOrder()
Run Code Online (Sandbox Code Playgroud)

这种仿制药的用法是什么?我在一些代码中发现它但从未读过任何关于它的内容.在我看来它允许给类型推断一些帮助.我试图搜索一下,但这并不容易找到(而且它甚至不在SCJP书/考试中!)

那么有人可以给我一个正确的解释它是如何工作的,这些都是用例等吗?

谢谢


编辑 感谢您的答案,但我期待更多细节:)所以如果有人想添加一些额外的信息:

更复杂的情况如何呢?

  • 使用类中声明的类型,我可以做类似Collections.<T>reverseOrder()例子吗?
  • 使用extends,super
  • 运用 ?
  • 给编译器只提供部分帮助(即O.manyTypesMethod<?,MyHelpTypeNotInfered,?,?,?,?,?>())

Pét*_*rök 18

它是泛型方法的显式类型规范.你总是可以这样做,但在大多数情况下它不需要.但是,在某些情况下,如果编译器无法自己推断泛型类型,则需要它.

请参阅教程页面末尾的示例.

更新:只有您的第一个示例有效.显式类型参数必须是明确的,因此没有通配符,extends或者super允许使用通配符.此外,要么明确指定每个类型参数,要么不指定任何类型参数; 即显式类型参数的数量必须与被调用方法的类型参数的数量相匹配.T如果在当前范围中定义良好,则允许使用类型参数,例如作为封闭类的类型参数.