为什么S和T而不是A和B?

时间:2016-06-25 10:34:02

标签: java generics language-agnostic naming-conventions

这可能是关于泛型类型的一个愚蠢的问题,但我无法在泛型类型中遵循命名约定后找到任何好的解释。 如果有一个具有两种泛型类型的类; Java程序员通常将其定义为:

class Foo<S extends Abc,T extends Pqr>{
   S sVar;
   T tVar;
}

为什么不像以下那样简单:

class Foo<A extends Abc,B extends Pqr>{
   A aVar;
   B bVar;
}

我只是想问为什么遵循这样的命名约定? ST背后有什么理由吗?或者这些约定来自其他语言(比如c ++模板)?

2 个答案:

答案 0 :(得分:6)

来自Java tutorials

  

类型参数命名约定

     

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

     

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

E - Element (used extensively by the Java Collections Framework)
K - Key
N - Number
T - Type
V - Value
S,U,V etc. - 2nd, 3rd, 4th types
     

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

特别要注意:&#34;如果没有这个约定,就很难区分一个类型变量和一个普通的类或接口名称。&#34; ,用哪个我当然同意。

大多数人会使用TS,因为这是常见做法,因此对于大多数其他人来说,可读。但我想补充一点,我看到名称AB也被用作类的示例名称:class A {...}class B {...}。将它们用作类型变量名将使它们难以分辨。

答案 1 :(得分:1)

引自OCP.Oracle.Certified.Professional.Java.SE.8.Programmer.II.Study.Guide.Exam.1Z0809“”

泛型的命名约定

类型参数可以任意命名。惯例是使用单一 大写字母使它们显然不是真正的类名。以下是常用字母:

  • E代表 e lement
  • K代表地图 k ey
  • V代表地图 v alue
  • N代表 n umber
  • T表示通用数据 t ype
  • 多种通用类型的S,U,V等

就作者而言,这是他们在大会背后的论证。我猜S,U&amp;使用V是因为它们相对于字母顺序更靠近T(代表类型)