代码之家  ›  专栏  ›  技术社区  ›  Krupal Shah VikingBlooded

为什么用S和T代替A和B?

  •  2
  • Krupal Shah VikingBlooded  · 技术社区  · 8 年前

    这可能是一个关于泛型类型的愚蠢问题,但我找不到泛型类型中遵循的命名约定背后的任何好的解释。 如果有一个类具有两个泛型类型;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++模板)?

    2 回复  |  直到 8 年前
        1
  •  6
  •   Jorn Vernee    8 年前

    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
    

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


    特别注意: 如果没有这个约定,就很难区分类型变量和普通类或接口名称之间的区别 ,我当然同意。

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

        2
  •  1
  •   mdzh    8 年前

    摘自OCP.Oracle认证专家Java.SE.8.程序员II.学习指南.考试1Z0809“”

    泛型的命名约定

    类型参数可以根据需要命名。惯例是使用单 大写字母,以表明它们不是真实的类名。以下是常用字母:

    • E代表一个 e 元素
    • K代表地图 k 伊伊
    • V表示地图 v 价值
    • N代表a n 数字
    • T代表通用数据 类型
    • S、 多个泛型类型的U、V等

    这是作者们就公约背后的论点所进行的讨论。我猜是S、U和;之所以使用V,是因为它们的字母顺序更接近T(代表Type)