倚楼听风雨
淡看江湖路

阿里巴巴Java开发规约第一章编程规约-常量定义篇

1.[强制] 不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。

反例:

老四附言:
魔法值往往时间久了会不知道这个值是干嘛的,比如说数字魔法值,某个方法中用了比较多的1,2,3,4等,突然之间回去查看很难回忆起他们代表的是什么,如果实现定义并且变量名称起一个有意义的名字会很好的帮助Code Review。

2.[强制] long或者Long初始赋值时,使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。

说明: Long a = 2l; 写的是数字的21,还是Long型的2?

老四附言:
其实这个怎么说呢,有一个良好的变成习惯是极好的,所以我觉得本条规则其实更多也是从阅读代码的角度来讲,避免他人误读。毕竟没几个傻呵呵的人会吧l写成1,所以为了他人考虑,统一使用大写是很好的编程习惯!

3.[推荐] 不要使用一个常量类维护所有常量,按常量功能进行归类,分开维护。

说明: 大而全的常量类,非得使用查找功能才能定位到修改的常量,不利于理解和维护。

正例: 缓存相关常量放在类CacheConsts下;系统配置相关常量放在类ConfigConsts下。

老四附言:
对于大项目而言,根据具体的业务来处理常量会使得项目清晰明了,小来小去的项目直接一个类甚至当前类直接书写就好了。所以规约也都是根据项目以及具体的业务场景来断定的,随着项目的发展而慢慢的去适应规约规则。

4.[推荐] 常量的复用层次有五层: 跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。
  • 跨应用共享常量: 放置在二方库中,通常是client.jar中的constant目录下。
  • 应用内共享常量: 放置在一方库中,通常是子模块中的constant目录下。

    反例: 易懂变量也要统一定义成应用内共享常量,两位攻城师在两个类中分别定义了表示"是"的变量:
    类A中: public static final String YES = "yes";
    类B中: public static final String YES = "y";
    A.YES.equals(B.YES),预期是true,但实际返回为false,导致线上问题。

  • 子工程内部共享常量: 即在当前子工程的constant目录下。
  • 包内共享常量: 即在当前包下单独的constant目录下。
  • 类内共享常量: 直接在类内部private static final定义。

老四附言:

关于一方库、二方库、三方库的基本解释老四之前在文章《阿里巴巴Java开发手册第六章-二方库依赖篇》做过一些说明,可以前去参考一下,至于常量复用层次孤尽老师已经说很详细了,无需多言。

5.[推荐] 如果变量值仅在一个固定范围内变化用enum类型来定义。

说明: 如果存在名称之外的延伸属性使用enum类型,下面正例中的数字就是延伸信息,表示一年中的第几个季节。

正例:

老四附言:
(⊙o⊙)…,其实这是enum的使用方式,详细可以参考一下老四浅析的《阿里巴巴Java开发规约第一章-注释规约篇》文章,文中第五条规约(强制所有的枚举类型字段必须要有注释,说明每个数据项的用途)浅析对enum的使用方式和enum的基础知识做了较多的讲解。

更博不易,如果觉得文章对你有帮助并且有能力的老铁烦请赞助盒烟钱,点我去赞助。或者扫描文章下面的微信/支付宝二维码打赏任意金额,老四这里抱拳了。赞助时请备注姓名或者昵称,因为您的署名会出现在赞赏列表页面,您的赞赏钱财也会被用于小站的服务器运维上面,再次抱拳。

赞(19) 给你买杜蕾斯
本站原创文章受自媒体平台原创保护,未经允许不得转载高老四博客 » 阿里巴巴Java开发规约第一章编程规约-常量定义篇
分享到: 更多 (0)

开始你的表演 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下老四,鼓励我更好的创作

支付宝扫一扫打赏

微信扫一扫打赏