阿里的java代码 阿里巴巴java代码规范手册( 二 )


【推荐】在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度 。
【推荐】接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁 性,并加上有效的 Javadoc 注释 。尽量不要在接口里定义变量,如果一定要定义变量,肯定 是与接口方法相关,并且是整个应用的基础常量 。
正例:接口方法签名 void commit();
接口基础常量 String COMPANY = "alibaba";
反例:接口方法定义 public abstract void f();
说明:JDK8 中接口允许有默认实现,那么这个 default 方法,是对所有实现类都有价值的默认实现 。
【阿里的java代码 阿里巴巴java代码规范手册】【参考】枚举类名带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开 。
说明:枚举其实就是特殊的类,域成员均为常量,且构造方法被默认强制是私有 。
正例:枚举名字为 ProcessStatusEnum 的成员名称:SUCCESS / UNKNOWN_REASON 。
【参考】各层命名规约:
1) 获取单个对象的方法用 get 做前缀 。
2) 获取多个对象的方法用 list 做前缀 , 复数形式结尾如:listObjects 。3) 获取统计值的方法用 count 做前缀 。
4) 插入的方法用 save/insert 做前缀 。
5) 删除的方法用 remove/delete 做前缀 。
6) 修改的方法用 update 做前缀 。
1) 数据对象:xxxDO,xxx 即为数据表名 。
2) 数据传输对象:xxxDTO,xxx 为业务领域相关的名称 。
3) 展示对象:xxxVO , xxx 一般为网页名称 。
4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO 。
【强制】不允许任何魔法值(即未经预先定义的常量)直接出现在代码中 。
【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析 成本,直接用类名来访问即可 。
【强制】相同参数类型,相同业务含义 , 才可以使用Java的可变参数,避免使用Object 。
说明:可变参数必须放置在参数列表的最后 。(提倡同学们尽量不用可变参数编程)
【强制】所有整型包装类对象之间值的比较 , 全部使用equals方法比较 。
说明:对于 Integer var = ? 在-128 至 127 范围内的赋值 , Integer 对象是在 IntegerCache.cache 产 生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断 , 但是这个区间之外的所有数 据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断 。
关于基本数据类型与包装数据类型的使用标准如下:
说明: POJO 类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值 ,任何 NPE 问题,或 者入库检查,都由使用者来保证 。
正例:数据库的查询结果可能是 null,因为自动拆箱 , 用基本数据类型接收有 NPE 风险 。
反例: 比如显示成交总额涨跌情况,即正负 x%,x 为基本数据类型,调用的 RPC 服务,调用不成功时,返回的是默认值,页面显示为 0%,这是不合理的,应该显示成中划线。所以包装数据类型的 null 值,能 够表示额外的信息,如:远程调用失败,异常退出 。
【强制】POJO 类必须写 toString 方法 。
使用 IDE 中的工具:source generate toString 时,如果继承了另一个 POJO 类,注意在前面加一下 super.toString 。
说明: 在方法执行抛出异常时 , 可以直接调用 POJO 的 toString()方法打印其属性值 , 便于排查问题 。
【强制】关于hashCode和equals的处理 , 遵循如下规则:
说明:String 已覆写 hashCode 和 equals 方法 , 所以我们可以愉快地使用 String 对象作为 key 来使用 。

推荐阅读