是<foo>与<t> </t> </foo>相同

时间:2014-11-18 10:53:16

标签: java generics

首先我认为java有一个名为Item的类型或类,但它似乎没有: Does java contain a data type named "Item"?

看来我可以在&lt;&gt;之间使用任何东西,无论它是否存在。

我想知道的是:

class Foo<Item> {

}


Foo<Vec2D> foo = new Foo<Vec2D>();

与:

相同
class Foo<T> {

}


Foo<Vec2D> foo = new Foo<Vec2D>();

3 个答案:

答案 0 :(得分:5)

您可以使用任何标识符作为参数名称,但使用单个字母可以减少混淆,因为它不太可能被误认为是类名。

Oracle的Generic types tutorial有以下建议:

  

按照惯例,类型参数名称是单个大写字母。这与您已经了解的变量命名约定形成鲜明对比,并且有充分的理由:如果没有这种约定,就很难区分类型变量和普通类或接口名称。

     

最常用的类型参数名称是:

     
      
  • E - Element(Java Collections Framework广泛使用)
  •   
  • K - Key
  •   
  • N - 数字
  •   
  • T - Type
  •   
  • V - 值
  •   
  • S,U,V等 - 第2,第3,第4类
  •   

答案 1 :(得分:0)

确实是一样的。它只是为未知泛型类型指定某个名称的方法。

来自Java教程&#39; Generic Types

  

使用以下格式定义泛型类:

     

class name<T1, T2, ..., Tn> { /* ... */ }

     

由尖括号(&lt;&gt;)分隔的类型参数部分跟在类名后面。它指定类型参数(也称为类型变量)T1,T2,...和Tn。

     

...

还有一些命名约定暗示:

  

按照惯例,类型参数名称是单个大写字母。这与您已经了解的变量命名约定形成鲜明对比,并且有充分的理由:如果没有这种约定,就很难区分类型变量和普通类或接口名称。

     

最常用的类型参数名称是:

     
      
  • E - Element(Java Collections Framework广泛使用)
  •   
  • K - Key
  •   
  • N - 数字
  •   
  • T - Type
  •   
  • V - 值
  •   
  • S,U,V等 - 第2,第3,第4类
  •   
     

您将在整个Java SE API和本课程的其余部分中看到这些名称。

答案 2 :(得分:0)

是的,这是一样的。对于泛型,括号中的名称只是您要使用的类型的名称。

就像变量的名称与代码无关,类型的名称也无关紧要。