java普通类模拟枚举实现原理

java类模拟枚举的实现原理,便于更好的理解枚举

方式一
/**
 * java普通类模拟枚举实现原理
 * 
 * @author chinoukin
 *
 */
public class WeekDay {

    private WeekDay() {
    }

    public final static WeekDay SUN = new WeekDay();
    public final static WeekDay MON = new WeekDay();
    public final static WeekDay TUE = new WeekDay();
    public final static WeekDay WED = new WeekDay();
    public final static WeekDay THU = new WeekDay();
    public final static WeekDay FRI = new WeekDay();
    public final static WeekDay SAT = new WeekDay();

    public WeekDay nextday() {
        if (this == SUN) {
            return MON;
        } else if (this == MON) {
            return TUE;
        } else if (this == TUE) {
            return WED;
        } else if (this == WED) {
            return THU;
        } else if (this == THU) {
            return FRI;
        } else if (this == FRI) {
            return SAT;
        } else {
            return SUN;
        }
    }

}
方式二
/**
 * java普通类模拟枚举实现原理(二)
 * 
 * @author chinoukin
 *
 */
public abstract class WeekDayAbstract {

    private WeekDayAbstract() {
    }

    public final static WeekDayAbstract SUN = new WeekDayAbstract() {

        @Override
        public WeekDayAbstract nextday() {
            return MON;
        }

    };
    public final static WeekDayAbstract MON = new WeekDayAbstract() {

        @Override
        public WeekDayAbstract nextday() {
            return TUE;
        }

    };
    public final static WeekDayAbstract TUE = new WeekDayAbstract() {

        @Override
        public WeekDayAbstract nextday() {
            return WED;
        }

    };
    public final static WeekDayAbstract WED = new WeekDayAbstract() {

        @Override
        public WeekDayAbstract nextday() {
            return THU;
        }

    };
    public final static WeekDayAbstract THU = new WeekDayAbstract() {

        @Override
        public WeekDayAbstract nextday() {
            return FRI;
        }

    };
    public final static WeekDayAbstract FRI = new WeekDayAbstract() {

        @Override
        public WeekDayAbstract nextday() {
            return SAT;
        }

    };
    public final static WeekDayAbstract SAT = new WeekDayAbstract() {

        @Override
        public WeekDayAbstract nextday() {
            return SUN;
        }

    };

    public abstract WeekDayAbstract nextday();

}

通过上面java类的模拟,现在我们来实现一个枚举

/**
 * 枚举类,借助java模拟来理解
 * @author chinoukin
 *
 */
public enum TrafficLamp {
    RED(30){
        public TrafficLamp nextLamp() {
            return GREEN;
        }
    },
    GREEN(45){
        public TrafficLamp nextLamp() {
            return YELLOW;
        }
    },
    YELLOW(5){
        public TrafficLamp nextLamp() {
            return RED;
        }
    };

    public abstract TrafficLamp nextLamp();
    @SuppressWarnings("unused")
    private int time;
    private TrafficLamp(int time) {
        this.time = time;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值