本帖最后由 燿陚√揚葳 于 2014-7-8 12:07 编辑
2.枚举
枚举:就是要让某个类型的变量的取值只能为若干个固定值中的一个否则编译器就会报错。枚举可以让编译器在编译时,就可以控制源程序中填写的非法值,普遍变量的方式在开发阶段无法实现这一目标。
枚举的原理:如要定义星期几或性别的变量,该怎么定义?假设引用1~7表示周一到周日,但有人可能会写成int WeekDay=0;
如代码:
abstract class WeekDay{
private WeekDay(){}
public static final WeekDay Sun=new WeekDay(){
public WeekDay nextDay(){
return Mon;
}
};
public static final WeekDay Mon=new WeekDay(){
public WeekDay nextDay(){
return Sun;
}
};
public abstract WeekDay nextDay();//采用抽象方法定义nextDay就将大量的if else语句转移成了一个个独立的类
public String toString(){
return this==Sun?"Sun":"Mon";
}
}
枚举的格式:public enum 类名{}
如
public enum WeekDay{
Sun,Mon,Tue;//元素列表,当有其他方法时应该放在元素列表的后面并加“;”如果没有其他方法则可以不写“;”
//枚举中的构造方法必须是私有的
private WeekDay(){}
private WeekDay(int day){}//如果想要调用这个有参数的方法那么直接在元素中调用即可;如:Mon(2)
}
抽象方法的枚举:
public enum TrafficLamp{
Red(30){
public TrafficLamp nextLamp(){
return Green;
}
},
Green(45){
public TrafficLamp nextLamp(){
return Yellow;
}
},
Yellow(15){
public TrafficLamp nextLamp(){
return Red;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){
this.time=time;
}
}
这里要注意的是,当枚举只有一个成员时,就可以作为一种单列的实现方式
|
|