enum枚举应用讲解

枚举的应用主要是,对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;
	}
}











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值