目录
枚举和注解
1.用enum代替int常量
在一些项目的代码中经常会看到用数字去表示不同类型的代码
// 例如,使用数字0, 1表示客户等级
public static final int NORMAL = 0;
public static final int VIP = 1;
// 或者用数字0, 1表示是和否等等...
这种方法称为int枚举模式, 此外还有这种模式的变体就是String枚举模式,用字母A, B, C等表示不同的类型.
这种方式虽然简单,但是缺少约束,例如下面的方法
// class XX
public void setCustomerLevel(int level) {
this.level = level;
}
当客户端(调用者)使用这个方法进行复制的时候,因为方法只要求传入一个int类型的数据,所有就有可能传入除上面int枚举外其它的值
// 知道的人会传入写好的枚举, 这样还好
setCustomerLevel(XX.NORMAL);
// 如果不熟悉代码的人或者不知道有上面的int模式枚举定义
// 可能会像下面这样使用方法
setCustomerLevel(1);
setCustomerLevel(3); // 出现意外的类型
2.用实例字段代替序数
3.使用EnumSet而不是bit fields
4.使用EnumMap而非ordinal indexing
5.用接口模拟可扩展的枚举
6.注解优于命名模式(naming pattern)
7.坚持使用@Override注解
8.用标记接口定义类型
标记接口(marker interface),是没有包含方法声明的接口,而只是指明一个类实现了具有某种属性的接口.
常见的标记接口, Serializable, 通过实现这个接口表明这个类的实例可以被写到ObjectOutputStream(或者“被序列化”)