JDK 新特性之枚举(enum):
枚举就是要某个类型的变量的取值只能是几个固定值中的某一个,否则,编译器就会报错,枚举可以让编译器在编译时就可以控制程序中填写的非法值,普通变量的方式无法实现这一目标;
枚举的实现:
package learn;
/**
* 枚举
* @author hui
*/
public class EnumTest {
public static void main(String[] args) {
WeekDay weekDay=WeekDay.SUN;//自己定义的类型WeekDay
System.out.println(weekDay.nextDay().toString());
}
}
在上面的类中,自己定义了一个类型WeekDay,建立一个自己的枚举类WeekDay_1;
package learn;
public class WeekDay_1 {
/* 这个类必须要有一个私有的构造 */
private WeekDay_1(){};
public static final WeekDay_1 SUN = new WeekDay_1() ;//星期天
public static final WeekDay_1 MON = new WeekDay_1() ;//星期一
public static final WeekDay_1 TUS = new WeekDay_1() ;//星期二
public static final WeekDay_1 WEN = new WeekDay_1() ;//星期三
public static final WeekDay_1 THUR = new WeekDay_1() ;//星期四
public static final WeekDay_1 FRI = new WeekDay_1() ;//星期五
public static final WeekDay_1 SAT = new WeekDay_1() ;//星期六
/*
* 他有一个方法,返回下一天
* */
public WeekDay_1 nextDay(){
if (this==SUN) { return MON; } else
if(this==MON){ return TUS; }else if(this==TUS){ return WEN; }else
if(this==WEN){ return THUR; }else if(this==THUR){ return FRI; }else
if(this==FRI){ return SAT; }else { return SUN; }
}
/**
* 重写toString()方法
*/
public String toString(){
if (this == SUN) {
return "Sunday";
} else if (this == MON) {
return "Monday";
} else if (this == TUS) {
return "Tuesday";
} else if (this == WEN) {
return "Wednesday";
} else if (this == THUR) {
return "Thursday";
} else if (this == FRI) {
return "Friday";
} else {
return "Saturday";
}
}
}
上面的方法,如果因为if..else..太过繁琐,可以写成:
package learn;
public abstract class WeekDay {
private WeekDay() {
}
//使用内部类的方式来实现nextDay
public static final WeekDay SUN = new WeekDay() {
@Override
public WeekDay nextDay() {
return MON;
}
};
public static final WeekDay MON = new WeekDay() {
@Override
public WeekDay nextDay() {
return TUS;
}
};
public static final WeekDay TUS = new WeekDay() {
@Override
public WeekDay nextDay() {
return WEN;
}
};
public static final WeekDay WEN = new WeekDay() {
@Override
public WeekDay nextDay() {
return THUR;
}
};
public static final WeekDay THUR = new WeekDay() {
@Override
public WeekDay nextDay() {
return FRI;
}
};
public static final WeekDay FRI = new WeekDay() {
@Override
public WeekDay nextDay() {
return SAT;
}
};
public static final WeekDay SAT = new WeekDay() {
@Override
public WeekDay nextDay() {
return SUN;
}
};
/*
* public WeekDay nextDay(){ if (this==SUN) { return MON; } else
* if(this==MON){ return TUS; }else if(this==TUS){ return WEN; }else
* if(this==WEN){ return THUR; }else if(this==THUR){ return FRI; }else
* if(this==FRI){ return SAT; }else { return SUN; } }
*/
public abstract WeekDay nextDay();
public String toString() {
if (this == SUN) {
return "Sunday";
} else if (this == MON) {
return "Monday";
} else if (this == TUS) {
return "Tuesday";
} else if (this == WEN) {
return "Wednesday";
} else if (this == THUR) {
return "Thursday";
} else if (this == FRI) {
return "Friday";
} else {
return "Saturday";
}
}
}
使用JDK自带的枚举:
package learn;
/**
* 枚举
* @author hui
*
*/
public class EnumTest {
public static void main(String[] args) {
WeekDay weekDay=WeekDay.SUN;
System.out.println(weekDay.nextDay().toString());
WeekDay_2 weekDay2=WeekDay_2.MON;
System.out.println(weekDay2.name());//返回当前对象的名字
System.out.println(weekDay2.toString());//返回当前对象的toString
System.out.println(weekDay2.ordinal());//返回当前对象的排序
}
/**
* 枚举
* @author hui
*
*/
public enum WeekDay_2{
SUN,MON,TUS,WEN,THUR,FRI,SAT;//各个值之间用逗号隔开
}
}
分享到:
评论