是的,您可以将多字符名称用于类型变量,只要可以将它们与类名称区分开即可。
这与Sun在2004年引入泛型时提出的约定不同。但是:
- 存在多个约定。
- 多字符名称与其他Java样式一致,例如Google的 Java样式。
- 可读的名称更具可读性。
可读性
在我写的某些界面中,我想使用不止一个字符来命名通用类型参数,以使代码更具可读性。
可读性好。
比较:
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风格指南允许单字母名称和多字符类,像T.结尾的名称
5.2.8类型变量名称
每个类型变量都以两种样式之一命名:
问题
“没有这个约定,很难说出类型变量与普通类或接口名称之间的区别。” –从Oracle教程“通用类型”中
如上所述,单字符名称不是区分类型参数和类名称的唯一方法。
为什么不只在JavaDoc中记录类型参数的含义呢?
的确,@param
JavaDoc元素可以提供更长的描述。但是,JavaDoc不一定是可见的也确实如此。(例如,Eclipse中有一个内容辅助工具,用于显示类型参数名称。)
多字符类型参数名称不遵循Oracle约定!
Sun的许多原始约定几乎都在Java编程中遵循。
但是,此特定约定不是。
竞争公约之间的最佳选择是意见问题。在这种情况下,选择Oracle以外的约定的后果很小。您和您的团队可以选择最能满足您需求的约定。