为了账号安全,请及时绑定邮箱和手机立即绑定

Java(带有多个字符)的通用类型参数命名约定?

/ 猿问

Java(带有多个字符)的通用类型参数命名约定?

慕莱坞7535251 2019-12-13 09:26:31

在我写的某些界面中,我想使用不止一个字符来命名通用类型参数,以使代码更具可读性。


就像是....


Map<Key,Value>

代替这个...


Map<K,V>

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


public void put(Key key, Value value)

这似乎是键和值是类。我发现或想到了一些符号,但没有什么比Sun的约定或最佳常规更好。


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


Map<KEY,VALUE>

Map<TKey,TValue>


查看完整描述

3 回答

?
交互式爱情

Oracle在Java教程>泛型>泛型类型中建议以下内容:


类型参数命名约定

按照约定,类型参数名称是单个大写字母。这与您已经知道的变量命名约定形成鲜明对比,并且有充分的理由:没有该约定,将很难分辨类型变量与普通类或接口名称之间的区别。


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


E-元素(由Java Collections Framework广泛使用)

K键

N-号码

T型

V-值

S,U,V等-第二,第三,第四类型

您将看到在Java SE API以及本课程其余部分中使用的这些名称。


我会坚持这样做以避免开发人员和可能的维护人员之间的混淆。


查看完整回答
反对 回复 2019-12-13
?
弑天下

附加 Type

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


参见Erwin Mueller的评论。他的建议对我来说是完全显而易见的:附加这个词Type。


称苹果为苹果,汽车称为汽车。有问题的名称是数据类型的名称,对吗?(在OOP中,类实质上定义了新的数据类型。)因此将其称为“类型”。


Mueller的示例,摘自原始帖子的文章:


public interface ResourceAccessor <ResourceType, ArgumentType, ResultType> {

    public ResultType run (ResourceType resource, ArgumentType argument);

}

附加 T

一个重复的问题提供了Andy Thomas的答案。请注意Google风格指南的摘录,该摘录建议一个多字符类型名称应以一个大写字母结尾T。


查看完整回答
反对 回复 2019-12-13
?
陪伴而非守候

是的,您可以将多字符名称用于类型变量,只要可以将它们与类名称区分开即可。


这与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类型变量名称


每个类型变量以两种样式之一命名:


单个大写字母,任选随后用单个数字(例如E,T,X,T2)


用于班级的形式名称(请参见第5.2.2节“ 班级名称”),后跟大写字母T(例如:RequestT,FooBarT)。


问题

“没有这种约定,就很难分辨出类型变量与普通类或接口名称之间的区别。” –来自Oracle教程,“泛型”


如上所述,单字符名称不是区分类型参数和类名称的唯一方法。


为什么不只在JavaDoc中记录类型参数的含义呢?


确实,@paramJavaDoc元素可以提供更长的描述。但是,JavaDoc不一定是可见的也确实如此。(例如,Eclipse中有一个内容辅助工具,用于显示类型参数名称。)


多字符类型参数名称不遵循Oracle约定!


Sun的许多原始约定几乎都在Java编程中遵循。


但是,此特定约定不是。


竞争公约之间的最佳选择是意见问题。在这种情况下,选择Oracle以外的约定的后果很小。您和您的团队可以选择最能满足您需求的约定。


查看完整回答
反对 回复 2019-12-13

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信