如果一个类的对象是有限而且固定的,在Java里被称为枚举类。
例如:季节类,它只有四个对象;行星类,只有九个对象。
手动实现枚举类,可采用如下设计方式:
1、通过private将构造器隐藏起来。
2、把这个类里的所有可能实例都是用public static final 属性来保存
3、如果有必要,可以提供一些静态方法,允许其他程序根据特定参数来获取与之匹配实例。。
例如:
public class Season{
//把Season类定义成不可变的,将其属性也定义成final
private final String name;
private final String desc;
public static final Season SPRING=new Season("春天","趁春踏青");
public static final Season SUMMER=new Season("夏天","夏日炎炎");
public static final Season FALL=new Season("秋天","秋高气爽");
public static final Season WINTER=new Season("冬天","围炉赏雪");
public static Season getSeason(int seasonNum){
switch(seasonNum){
case 1:
return SPRING;
case 2:
return SUMMER;
case 3:
return FALL;
case 4:
return WINTER;
default:
return null;
}
}
private Season(String name,String desc){
this.name=name;
this.desc=desc;
}
public String getName(){
return this.name;
}
public String getDesc(){
return this.desc;
}
}
枚举类与普通类的区别:
1、枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了java.lang.Enum类,而不是继承Object类。
2、枚举类的构造器只能使用private修饰,如果省略了其构造器的访问控制符,则默认是private。
3、枚举类的所有实例必须在枚举类中显式列出,否则这个枚举类将永远都不能产生实例。列出的这些实例,系统会自动添加public static final修饰。
4、所有枚举类都提供了一个values(),该方法可以很方便地遍历所有的枚举值。
JDK1.5后新增了enum关键字,用一定以枚举类。
public enum SeasonEnum{
SPRING,SUMMER,FALL,WINTER;
}