编程规约-常量定义
其它相关文章
Java 编码规范1(编程规约-命名风格)
Java 编码规范2(编程规约-常量定义)
Java 编码规范3(编程规约-代码格式)
Java 编码规范4(编程规约-OOP规约)
Java 编码规范5(编程规约-集合处理)
Java 编码规范6(编程规约-并发处理)
Java 编码规范7(编程规约-控制语句)
Java 编码规范8(编程规约-注释规约与其它)
Java 编码规范9(异常日志)
Java 编码规范10(单元测试)
Java 编码规范11(安全规约)
Java 编码规范12(MySQL-建表规约)
Java 编码规范13(MySQL-索引规约)
Java 编码规范14(MySQL-SQL语句与ORM映射)
Java 编码规范15(工程结构)
[强制] 不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
反例:
String key = "Id#taobao_" + tradeId; cache.put(key, value);
[强制] long或者Long初始赋值时,使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。
[推荐] 不要使用一个常量类维护所有常量,按常量功能进行归类,分开维护。
- 尽量不要使用什么
Constants
集中定义所有的常量,降低易用性、可读性、维护性。 - 缓存相关常量放在类
CacheConsts
下;系统配置相关常量放在类ConfigConsts
下。
- 尽量不要使用什么
[推荐] 常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。
- 跨应用共享常量:放置在二方库中,通常是client.jar中的constant目录下。
应用内共享常量:放置在一方库中,通常是子模块中的constant目录下。
- 反例(不要浪): 易懂变量也要统一定义成应用内共享常量,两位攻城师在两个类中分别定义了表示“是”的变量:
//类A中: public static final String YES = "yes"; //类B中: 类B中:public static final String YES = "y";
A.YES.equals(B.YES)
,预期是true
,但实际返回为false
,导致线上问题。子工程内部共享常量:即在当前子工程的constant目录下。
- 包内共享常量:即在当前包下单独的constant目录下。
- 类内共享常量:直接在类内部private static final定义。
[推荐] 如果变量值仅在一个固定范围内变化用
enum
类型来定义。- 如果存在名称之外的延伸属性使用
enum
类型,下面正例中的数字就是延伸信息,表示一年中的第几个季节。
- 如果存在名称之外的延伸属性使用
public enum SeasonEnum {
SPRING(1), SUMMER(2), AUTUMN(3), WINTER(4);
int seq;
SeasonEnum(int seq){
this.seq = seq;
}
}