---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! -------------------------
重温了一下高新技术的枚举部分。
枚举
枚举概述
枚举的关键字是enum,枚举是一个特殊的类,其中的每一个元素都是该类的一个对象。
注意:因为不能new枚举的实例,所以枚举不能继承其他类,也不能被其他类继承。
如果枚举只有一个成员时,就可以作为一种单例的实现方式。
为什么要有枚举?
问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
用普通类模拟枚举
//模拟一下具有抽象方法的枚举类
public 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();
@Override
public String toString(){
if(this==SUN){
return "SUN";
}else{
return "MON";
}
}
}
枚举的应用
public static void main(String[] args) {
WeekDay sun=WeekDay.SUN;
System.out.println(sun);
System.out.println(sun.nextday());
System.out.println("-------------");
System.out.println(WeekDay1.SAT);
//获得SAT的名字
System.out.println(WeekDay1.SAT.name());
//SAT元素是第几个,从零开始数
System.out.println(WeekDay1.SAT.ordinal());
System.out.println(WeekDay1.values().length);
//根据名字获取对应构造方法的实例对象
System.out.println(WeekDay1.valueOf("SAT"));
System.out.println("------------");
System.out.println(TrafficLamp.BLUE.nextlamp());
}
public enum WeekDay1{
SUN(0),MON(1),THU(),THR,WES,FIR,SAT;
private int day;
private WeekDay1(int day){
this.day=day;
}
private WeekDay1(){};
public WeekDay1 nextday(){
return null;
}
}
枚举主要的方法如注释中的那几个。
抽象化的枚举
public enum TrafficLamp{
RED(45){
public TrafficLamp nextlamp() {
return BLUE;
}
},
YELLOW(5){
public TrafficLamp nextlamp() {
return RED;
}
},
BLUE(35){
public TrafficLamp nextlamp() {
return YELLOW;
}
};
private int time;
private TrafficLamp(int time){
this.time=time;
}
public abstract TrafficLamp nextlamp();
}
这里编译的时候实际上是初始化了4个类的字节码,RED,YELOLOW,BLUE各一个还有整体的TRAFFICLamp一个。
------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------