Skip to content

java guides

雷霹雳的爸爸 edited this page Jul 30, 2018 · 10 revisions

概述

以阿里巴巴开发手册1.4.0版本为蓝本,

参考

内容

以阿里的开发手册1.4版(以下简称手册)中的编程规约和异常日志部分为蓝本及基础,并结合其他较为知名的guidelines及组织自身特点,形成一下文本

如果遵循阿里开发手册中的意见(page 1-22),这里不再特别列出,以下,仅记录对手册的修改和补充部分

对手册中内容的调整和补充

(一) 1 关于标识符的名称规则

原文:

【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例:name / name / $name / name / name$ / name

说明:

  • 按说这个规则应该是没有争议的,拎出来是内部讨论时候有提到下划线是可能会被用到的,所以这里需要进行补充说明
  • 美元符号实际上已经认为是内部类等系统内部使用了
  • 下划线有很大一部分是源于其他语言,比如python,在java中不适用
  • 还有一个原因是代码生成工具他们识别下划线来生成类似setter或getter这类的代码,java世界没有这种社区习惯

(一)3 当缩写遇到驼峰命名法

原文:

【强制】类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等。
正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion
反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion

修改为:

  • 【强制】类名使用UpperCamelCase风格,遇到缩写和不常见结构体时,遵循google java style guides中规则

说明:

  • 阿里这条比较拧巴,为什么TCP UDP就要按驼峰而这些例外不要?豁免权的来源完全搞不清楚,估计是内部对现状的妥协,这么写实际上是在违反一致性原则,如果真是遗留代码的问题,应当给一个对旧代码的整体例外约束比较好

(一)6,抽象类命名规则

(四)14,split和空字符串的问题

原文:

【推荐】使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无 内容的检查,否则会有抛 IndexOutOfBoundsException 的风险。

说明:

String str = "a,b,c,,";  
String[] ary = str.split(",");  
// 预期大于 3,结果是 3 
System.out.println(ary.length);

补充:

  • 【推荐】如果允许split结果数组中有空字符串,那么可以使用split(regex,-1)来进行切分

说明:

  • 手册说的很对,但是一般对返回是数组的处理,应该都是循环迭代才对,所以可能真的抛出IndexOutOfBoundsException的可能性不大,也就是不会直接去操作数组下标,也就是可能压根都不报错,反倒会有一些奇怪的问题发生

(四)15,同名方法的顺序问题

原文:

【推荐】当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起, 便于阅读,此条规则优先于第 16 条规则。

补充:

  • 重载方法的顺序按照参数的名字和数量依次排列,名字按字母升序,数量按倒序

说明:

  • 要求按顺序又没给出应该按什么顺序,是原手册中的极大缺陷,这里给出的补充描述可能也不太清楚,原则就是有相关性的放在一起
  • 举例

手册内容的补充

Clone this wiki locally