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

2022-09-02 21:30:40

我读过整本SCJP6书《Sierra and Bates》,考试成绩为88%。

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

Collections.<TimeUnit>reverseOrder()

这种泛型的用法是什么?我在一些代码中发现了它,但从未读过任何关于它的信息。在我看来,它允许为类型推断提供一些帮助。我试图搜索它,但它不是那么容易找到(它甚至不在SCJP书籍/考试中!

那么有人可以给我一个适当的解释它是如何工作的,哪些是所有的用例等?

谢谢


编辑感谢您的回答,但我期望更多的细节:)因此,如果有人想添加一些额外的信息:

那么更复杂的案例呢?

  • 使用在类中声明的类型,我可以做类似exemple的事情吗?Collections.<T>reverseOrder()
  • 用?extendssuper
  • ?
  • 仅向编译器提供部分帮助(即O.manyTypesMethod<?,MyHelpTypeNotInfered,?,?,?,?,?>() )

答案 1

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

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

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


答案 2

你是100%正确的,这是为了帮助类型推断。大多数时候,你不需要在Java中这样做,因为它可以推断类型(甚至从赋值的左侧,这很酷)。Java 网站上的泛型教程中介绍了此语法。


推荐