在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。在Java中想表示这种数据集最容易想到的写法可能是这样,我们以表示一周五天的工作日来举例:
public class WeekDay {
public static final int MONDAY = 1;
public static final int TUESDAY = 2;
public static final int WENSDAY = 3;
public static final int THURSDAY = 4;
public static final int FRIDAY = 5;
}
现在,你的类就可以使用像WeekDay.TUESDAY这样的常量了。但是这里隐藏着一些问题,这些常量是Java中int类型的常量,这意味着该方法可以接受任何int 类型的值,即使它和WeekDay中定义的所有日期都对应不上。因此,您需要检测上界和下界,在出现无效值的时候,可能还要抛出一个IllegalArgumentException。而且,如果后来又添加另外一个日期(例如WeekDay.SATURDAY ),那么必须改变所有代码中的上界,才能接受这个新值。 换句话说,在使用这类带有整型常量的类时,这个方案也许可行,但并不是非常有效。
Joshua Bloch老大这时站了出来,在他的著作《Effective Java》中提出了在这样场景下的一种非常好的模式——Type-safe enumeration pattern。这个模式简而言之就是给这样的常量类一个私有的构造方法,然后声明一些public static final的同类型的变量暴露给使用者,例如:
public class WeekDay {
public static final WeekDay MONDAY = new WeekDay(1);
public static final WeekDay TUESDAY = new WeekDay(2);
public static final WeekDay WENSDAY = new WeekDay(3);
public static final WeekDay THURSDAY = new WeekDay(4);
public static final WeekDay FRIDAY = new WeekDay(5);
public int getValue(){
return value;
}
private int value;
private WeekDay(int i){
this.value = i;
}
//other methods...
}
这样做的好处是你的程序现在接受的不是int类型的数据了,而是WeekDay的一个预定义好的static final的实例(WeekDay.TUESDAY等),例如:
public void setWeekDay(WeekDay weekDay){...}
而这样做也避免了可以随意向方法中传递一个不合法的int型数值(例如-1)而造成程序错误。同时,它还会带来其他的一些好处:由于这些枚举的对象都是一些类的实例,所以在里面放一些需要的属性来存放数据;又由于他们都是单例的,你可以使用equals方法或是==符号来比较它们。
Perfect!
分享到:
相关推荐
j2sdk java jdk java 开发工具 jdk 1.4 免安装版
jdk1.4非安装版,可直接在MyEclipse等IDE工具导入jdk相应的版本。希望对你们有用处。
java发送邮件(jdk1.4和jdk1.5) 下载即可用
java_jdk1.4 api 中文手册
JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别JDK1.4,1.5,1.6的区别...
jdk1.4老版的JDK,不常用了,有特殊需要的可以下载。
之前好些人找我要1.4linux版本,现在分享出来
java jdk 1.4
jdk1.4绿色版本
这是JDK1.4的源代码,供学习参考。 它是早期发布的Jdk的源代码。
java开发常用工具 idea jdk1.4 redisdesktopManager setings文件
Memcache for jdk 1.4
JAVA JDK 小版本为JDK1.4.2.17 32位安装包。备份留着自己使用。
兼容 jdk 1.4 的json jar包,经过测试支持JDK1.4,记得导入依赖JAR包
因为听同事说官网木有jdk1.4下载了
jdk1.4,绿色版,免安装版,对于旧的jdk代码可以运行。
jdk1.4.2.17
JDK1.4工程下json解析包集合(内含6个jar包),可以解决项目工程在JDK1.4下对对象的JSON解析。亲测有效,希望能
JAVA JDK 小版本为JDK1.4.2.04 32位安装包。备份留着自己使用。
当操作系统中同时安装了JDK1.4和JDK1.5,如何更改环境变量等设置。