目录
一、为何引入枚举类型(为了替代魔法值)
什么是魔法值?魔法值有哪些隐患,见另一篇文章编码规约之使用Enum枚举类替代魔法值
那么为什么不用静态变量来替换魔法值呢?
有时候,变量的取值只在一个有限的集合内。例如一年中只有春、夏、秋、冬四季,销售服装只有小、中、大、特大四种尺寸。当然,可以将这些尺寸分别编码为1、2、3、4或者S、M、L、X。可能,我们有疑问,为何不用静态全局常量来替代呢?以一年四季为例
public static final int SEASON_SPRING = 1;
public static final int SEASON_SUMMER = 2;
public static final int SEASON_FALL = 3;
public static final int SEASON_WINTER = 4;
但是这样存在着一定的隐患
1.静态常量类型不安全
若一个方法中要求传入季节这个参数,用常量的话,形参就是int类型,开发者传入任意类型的int类型值就行,但是如果是枚举类型的话,就只能传入枚举类中包含的对象。
currentSeason.setSeason(需要传入一个整型参数,即季节编码);
currentSeason.setSeason(SEASON_SPRING);//传入春季整型编码
//那既然setSeason接收一个整型数据,那么我就可以向其传入其他整型数据
currentSeason.setSeason(0);
//那么此处的0,又代表什么呢?
2. 没有命名空间