枚举类名带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。(说明:枚举其实就是特殊的类,域成员均为常量,且构造方法被默认强制是私有。)枚举名字为ProcessStatusEnum的成员名称:SUCCESS / UNKNOWN_REASON
各层命名规约:
A) Service/DAO 层方法命名规约获取单个对象的方法用get做前缀。
获取多个对象的方法用list做前缀,复数形式结尾如:listObjects。
获取统计值的方法用count做前缀。
插入的方法用save/insert做前缀。
删除的方法用remove/delete做前缀。
修改的方法用update做前缀。
B) 领域模型命名规约
数据对象:xxxDO,xxx即为数据表名。
数据传输对象:xxxDTO,xxx为业务领域相关的名称。
展示对象:xxxVO,xxx一般为网页名称。
POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。
反例:
不能以下划线或美元符号开始、结束,如:name、$name、name
严禁使用拼音与英文混合的方式,如:DaZhePromotion[打折]、 getPingfenByName() [评分]
避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名,使可读性降低。
杜绝完全不规范的缩写,避免望文不知义。AbstractClass“缩写”命名成AbsClass,condition“缩写”命名成condi,此类随意缩写严重降低了代码的可阅读性。
接口类中的方法和属性不要加任何修饰符号(public也不要加) public abstract void f();
POJO类中布尔类型变量都不要加is前缀,否则部分框架解析会引起序列化错误。
定义为基本数据类型Boolean isDeleted的属性,它的方法也是isDeleted(),RPC框架在反向解析的时候,“误以为”对应的属性名称是deleted,导致属性获取不到,进而抛出异常。
(二) 常量定义不允许任何魔法值(即未经预先定义的常量)直接出现在代码中 String key ="Id#taobao_" + tradeId;
在long或者Long赋值时,数值后使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。Long a = 2l;
不要使用一个常量类维护所有常量,要按常量功能进行归类,分开维护。正例:缓存相关常量放在类CacheConsts下;系统配置相关常量放在类ConfigConsts下。
如果变量值仅在一个固定范围内变化用enum类型来定义。
(三) 代码格式采用4个空格缩进,禁止使用tab字符。
注释的双斜线与注释内容之间有且仅有一个空格。
在进行类型强制转换时,右括号与强制转换值之间不需要任何空格隔开int second = (int)first + 2;
IDE的text file encoding设置为UTF-8;IDE中文件的换行符使用Unix格式,不要使用Windows格式。
单个方法的总行数不超过80行
不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以提升可读性(说明:任何情形,没有必要插入多个空行进行隔开。)
(四) OOP 规约避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可
所有的覆写方法,必须加@Override注解
外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响。接口过时必须加@Deprecated注解,并清晰地说明采用的新接口或者新服务是么。
不能使用过时的类或方法。
Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals,"test".equals(object);【推荐使用 java.util.Objects#equals(JDK7 引入的工具类】
所有整型包装类对象之间值的比较,全部使用equals方法比较。【在-128至127这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断】
定义数据对象DO类时,属性类型要与数据库字段类型相匹配。数据库字段的bigint必须与类属性的Long类型相对应。
为了防止精度损失,禁止使用构造方法BigDecimal(double)的方式把double值转化为BigDecimal对象(在精确计算或值比较的场景中可能会导致业务逻辑异常)。BigDecimal g = new BigDecimal(0.1f);实际的存储值为:0.10000000149。正例:优先推荐入参为String的构造方法,或使用BigDecimal的valueOf方法,此方法内部其实执行了Double的toString,而Double的toString按double的实际能表达的精度对尾数进行了截断。
BigDecimal recommend1 = new BigDecimal("0.1"); BigDecimal recommend2 = BigDecimal.valueOf(0.1);