这可能是关于泛型类型的一个愚蠢的问题,但我无法在泛型类型中遵循命名约定后找到任何好的解释。 如果有一个具有两种泛型类型的类; 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;
}
我只是想问为什么遵循这样的命名约定? S
和T
背后有什么理由吗?或者这些约定来自其他语言(比如c ++模板)?
答案 0 :(得分:6)
类型参数命名约定
按照惯例,类型参数名称是单个大写字母。这与您已经了解的变量命名约定形成了鲜明的对比,并且有充分的理由:如果没有这种约定,就很难区分类型变量和普通类或接口名称。
最常用的类型参数名称是:
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; ,用哪个我当然同意。
大多数人会使用T
和S
,因为这是常见做法,因此对于大多数其他人来说,可读。但我想补充一点,我看到名称A
和B
也被用作类的示例名称:class A {...}
,class B {...}
。将它们用作类型变量名将使它们难以分辨。
答案 1 :(得分:1)
引自OCP.Oracle.Certified.Professional.Java.SE.8.Programmer.II.Study.Guide.Exam.1Z0809“”
泛型的命名约定
类型参数可以任意命名。惯例是使用单一 大写字母使它们显然不是真正的类名。以下是常用字母:
就作者而言,这是他们在大会背后的论证。我猜S,U&amp;使用V是因为它们相对于字母顺序更靠近T(代表类型)