枚举的应用主要是,对enum类型,添加自定义的属性,增加构造方法,增加自定义方法(抽象方法),对自定义的属性维护方便
详见:参考代码示例3
1、自定义枚举,剖析枚举原理
2、使用枚举enum,查看常用方法
3、枚举应用举例
4、枚举可以作为快速实现单例的一种方式
1、
/**
* 自定义枚举类
* 枚举相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法
*
* 枚举元素必须位于枚举体中最开始的部分,枚举元素列表后要有分号与其他成员分割,
* 把枚举中的成员方法或变量放在枚举元素的前面,编译器报告错误
*
*/
public abstract class WeekDay1 {
/**
* 普通类实现枚举功能
* 1、私有的构造方法
* 2、每个元素分别有一个公有的静态成员变量表示
* 3、可以有若干公有方法或抽象方法,例如:要提供nextDay方法必须是抽象的。
* 采用抽象方法定义nextDay就像将大量的if else语句转移成一个个独立的类
*
* 枚举只有一个成员时,就可以作为一种单例的实现方式
*/
private WeekDay1() {
}
public final static WeekDay1 SUN = new WeekDay1(){
@Override
public WeekDay1 nextDay() {
return MON;
}
};
public final static WeekDay1 MON = new WeekDay1(){
@Override
public WeekDay1 nextDay() {
return SUN;
}
};
//nextDay方法,都交由子类去完成,
public abstract WeekDay1 nextDay();
/* public WeekDay nextDay() {
if (this == SUN) {
return MON;
}
if (this == MON) {
return SUN;
}
return null;
}
*/
public String toString() {
return this == SUN?"SUN":"MON";
}
}
2、
public class EnumTest {
public static void main(String[] args) {
WeekDay weekDay1=WeekDay.MON;
System.out.println(weekDay1);
WeekDay weekDay2=WeekDay.SAT;
/*System.out.println(weekDay2);
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal());//定义枚举中的排序
//把字符串变成枚举对象
System.out.println(WeekDay.valueOf("SUN"));
//获取枚举中,所有类型
System.out.println(Arrays.toString(WeekDay.values()));
*/
}
public enum WeekDay{
SUN(4),MON,TUE,WES,THI,FRI,SAT;
private WeekDay(){
System.out.println("frist");
};
private WeekDay(int day){
System.out.println("second");
};
}
public enum TrafficLamp{
RED(10) {
public TrafficLamp nextLamp() {
return TrafficLamp.GREEN;
}
},
GREEN(20) {
public TrafficLamp nextLamp() {
return TrafficLamp.YELLOW;
}
},
YELLOW(30) {
public TrafficLamp nextLamp() {
return TrafficLamp.RED;
}
};
private int time;
public abstract TrafficLamp nextLamp();
private TrafficLamp(int time){
this.time=time;
}
}
}
3、
/**使用枚举:对状态码统一管理*/
public enum ResultEnum {
/**成功*/
SUCCESS(0,"成功"),
/**失败*/
ERROR(1,"失败");
// ...
//可以在添加其他定义好的状态码
private Integer code;
private String msg;
ResultEnum(Integer code,String msg){
this.code=code;
this.msg=msg;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}