枚举类型模拟

JAVA中的枚举类型总是会让初学者有些害怕。由于C语言的惯性思维,导致很多人总是不能很好的理解JAVA中的枚举类型的原理。本文就从模拟枚举类型的实现的角度来学习枚举类型。

JAVA中的枚举:

1.枚举类型是一种取值被严格限定在一个有限的集合中的变量类型。
2.java中的枚举是一种特殊的类。每一个枚举都会被编译成一个class文件。
3.枚举主要用于限定变量的取值,从而从根源上有效的避免了非法的赋值。
4.声明一个枚举的方式为 public enum Sex{ MALE,FEMALE } ,在使用时即可使用Sex.MALE和Sex.FEMALE。

下面我们来模拟Enum:

public class Weekday {
    //构造方法必须私有 
    //保证其他任何类都不能创建Weekday的实例
    private Weekday(){}

    //在静态初始化的时候创建对象
    //引用必须是共有的静态的
    public static Weekday SUN = new Weekday();
    public static Weekday MON = new Weekday();
    public static Weekday TUE = new Weekday();
    public static Weekday WED = new Weekday();
    public static Weekday THU = new Weekday();
    public static Weekday FRI = new Weekday();
    public static Weekday SAT = new Weekday();
}

然后我们就可以使用它了,使用起来和Enum没有什么区别。
Weekday weekday = Weekday.SUN;
而且weekday 的值只能从集合{SUN,MON,TUE,WED,THU,FRI,SAT}中取,而不能被我们随便定义。
实际上,enum就是用类似的方法实现的。

如何使用有参数的枚举类型:

有时候,我们需要将枚举类型的值与int类型的值相对应,这时候,我们就需要给每个枚举对象一个int类型的value。这是可以通过重写enum类型的构造方法来实现。如:

public enum Weekday {
    SUN(0);
    MON(1);
    TUE(2);
    private int value;
    private Weekday(int value){
        this.value=value;
    }
    public int getValue(){
        return value;
    }

    public static  WeekDay getDay(int value){
        switch(value){
            case 0:return  WeekDay.SUN;
            case 1:return WeekDay.MON;
            case 2:return WeekDay.TUE;
            default:return null;
    }
}

对照上面的代码,是不是这个有参数的枚举类型也很容易理解?

其实java类的枚举类型实现也是通过类似的语法糖实现的而已,所有的enum类编译之后都是一个继承java.lang.Enum的类而已。不信我们可以在上面的这个类中添加个方法试下:

public static void main(String[] args) {
       System.out.println(SUN instanceof Enum);
   }

输出结果肯定为true.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值