Java的泛型类型参数命名约定(具有多个字符)?附加Type 附加T

2022-08-31 07:49:37

在我编写的某些接口中,我想用多个字符命名泛型类型参数,以使代码更具可读性。

像....

Map<Key,Value>

而不是这个...

Map<K,V>

但是当涉及到方法时,类型参数看起来像java类,这也令人困惑。

public void put(Key key, Value value)

这似乎就像键和值是类。我发现或想到了一些符号,但不像Sun的约定或一般的最佳实践。

我猜到或发现的替代方案...

Map<KEY,VALUE>
Map<TKey,TValue>

答案 1

Oracle 在 Java 教程>泛型>泛型类型中建议使用以下方法

类型参数命名约定

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

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

  • E - 元素(由 Java 集合框架广泛使用)
  • K - 键
  • N - 数字
  • T - 类型
  • V - 值
  • S,U,V 等 - 第 2、3、4 种

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

我会坚持下去,以避免开发人员和可能的维护者之间的混淆。


答案 2

附加Type

可以在 DZone 页面上的注释中找到一个很好的讨论,参数化类型的命名约定

请参阅Erwin Mueller的评论。他的建议对我来说非常明显:附加单词Type

称苹果为苹果,称汽车为汽车。有问题的名称是数据类型的名称,对吧?(在 OOP 中,类实质上定义了新的数据类型。所以称之为“类型”。

穆勒的例子,来自原始帖子的文章:

public interface ResourceAccessor < ResourceType , ArgumentType , ResultType > {
    public ResultType run ( ResourceType resource , ArgumentType argument );
}

附加T

一个重复的问题提供了安迪·托马斯的答案。请注意Google样式指南的摘录,该摘录建议多字符类型名称应以单个大写字母结尾。T