是的,您可以对类型变量使用多字符名称,只要它们与类名有明显区别。
这与 Sun 在 2004 年引入泛型时建议的惯例不同。但是:
可读性
在我写的一些接口中,我想用多个字符来命名泛型类型参数,以使代码更具可读性。
可读性很好。
比较:
public final class EventProducer<L extends IEventListener<E>,E>
implements IEventProducer<L,E> {
到:
public final class EventProducer<LISTENER extends IEventListener<EVENT>,EVENT>
implements IEventProducer<LISTENER, EVENT> {
或者,使用 Google 的多字符约定:
public final class EventProducer<ListenerT extends IEventListener<EventT>,EventT>
implements IEventProducer<ListenerT, EventT> {
public final class EventProducer<ListenerT extends IEventListener<EventT>,EventT>
implements IEventProducer<ListenerT, EventT> {
谷歌风格
Google Java Style Guide 允许单字母名称和以 T 结尾的多字符类类名称。
5.2.8 Type variable names
每个类型变量都以两种样式之一命名:
问题
“如果没有这个约定,就很难区分类型变量和普通类或接口名称。” – 来自Oracle tutorials, “Generic types”
正如我们在上面看到的那样,单字符名称并不是区分类型参数和类名的唯一方法。
为什么不在 JavaDoc 中记录类型参数的含义?
@param JavaDoc 元素确实可以提供更长的描述。但是,JavaDocs 不一定是可见的,这也是事实。 (例如,Eclipse 中有一个显示类型参数名称的内容辅助。)
多字符类型参数名称不遵循 Oracle 约定!
Java 编程中几乎普遍遵循 Sun 的许多原始约定。
但是,这个特定的约定不是。
竞争公约中的最佳选择是见仁见智。在这种情况下,选择 Oracle 以外的约定的后果很小。您和您的团队可以选择最能满足您需求的约定。