枚举的主流使用方式

枚举的好处

  • 保证类型安全
  • 够直观

枚举的主流用法

  • 普通常量用法
    //Enum 的枚举值 默认都是 public static final 的
    enum Zoo{
        ORANGE, BLUE, WHITE

    }

    public class ProtectZoo{
        Zoo z = Zoo.BLUE;

        public void change(){
            switch (z){
                case BLUE:
                    break;
                case WHITE:
                    break;
                case ORANGE:
                    break;
            }
        }
    }
  • 自定义的枚举用法
enum Zoo{
        //这种自定义方法的,要在最后一个后面加分号 ";",并且要重写和下面参数对应的构造方法
        //关键是这种枚举值的定义要放在首位
            ELEPHANT("大象", 0), LION("狮子", 1), COW("牛", 2);

        private String name;
        private int ordenal;

        private Zoo(String name, int ordinal){
            //因为我们创建的枚举类(比如-Zoo)默认是继承Enum的。(因此此时的Zoo不能再继承任何class类,但是可以实现interface接口)
            //不能有public 构造方法,为保证用户无法再创建枚举实例
            //(覆盖父类)构造方法要私有
            this.name = name;
            this.ordenal = ordinal;

        }


        //根据 "序数" 获取对应的动物的名称
        public String getAnimalName(int ordinal){
            //枚举使用这种遍历方式取值
            for (Zoo animal : Zoo.values()){
                if(animal.ordenal == ordinal){
                    return animal.name;
                }
            }

            return null;
        }


        public String getName(){
            return this.name;
        }

        public void setName(String name){
            this.name = name;
        }

        public int getOrdinal(){
            return this.ordenal;
        }

        public void setOrdinal(int ordenal){
            this.ordenal = ordenal;
        }


        //重写 枚举类 中的toString 方法,来实现自己的需求
        @Override
        public String toString(){
            return "北京动物园:"+this.name+"-"+this.ordenal;
        }
    }

  • 实现接口的枚举用法
interface Food{
        void onSteamed();//清蒸
        void onFried();//油炸
    }
    enum Zoo implements Food{
        //这种自定义方法的,要在最后一个后面加分号 ";",并且要重写和下面参数对应的构造方法
        //关键是这种枚举值的定义要放在首位
            ELEPHANT("大象", 0), LION("狮子", 1), COW("牛", 2);

        private String name;
        private int ordenal;

        private Zoo(String name, int ordinal){
            //因为我们创建的枚举类(比如-Zoo)默认是继承Enum的。(因此此时的Zoo不能再继承任何class类,但是可以实现interface接口)
            //不能有public 构造方法,为保证用户无法再创建枚举实例
            //(覆盖父类)构造方法要私有
            this.name = name;
            this.ordenal = ordinal;

        }

        @Override
        public void onSteamed() {
            //这里要实现接口的方法,然后在方法中做对应逻辑处理就ok
        }

        @Override
        public void onFried() {
            //这里要实现接口的方法,然后在方法中做对应逻辑处理就ok
        }

        //根据 "序数" 获取对应的动物的名称
        public String getAnimalName(int ordinal){
            //枚举使用这种遍历方式取值
            for (Zoo animal : Zoo.values()){
                if(animal.ordenal == ordinal){
                    return animal.name;
                }
            }

            return null;
        }


        public String getName(){
            return this.name;
        }

        public void setName(String name){
            this.name = name;
        }

        public int getOrdinal(){
            return this.ordenal;
        }

        public void setOrdinal(int ordenal){
            this.ordenal = ordenal;
        }


        //重写 枚举类 中的toString 方法,来实现自己的需求
        @Override
        public String toString(){
            return "北京动物园:"+this.name+"-"+this.ordenal;
        }
        
        
    }

  • EnumSet和EnumMap的用法
EnumSet保证集合中的元素不重复;EnumMap保证的是key必须是Enum类型的元素,value是任意类型值。
enum Zoo {
        //这种自定义方法的,要在最后一个后面加分号 ";",并且要重写和下面参数对应的构造方法
        //关键是这种枚举值的定义要放在首位
            ELEPHANT("大象", 0), LION("狮子", 1), COW("牛", 2);

        private String name;
        private int ordenal;
        private EnumMap<Zoo, String> enumMap = new EnumMap<Zoo, String>(Zoo.class);

        private Zoo(String name, int ordinal){
            //因为我们创建的枚举类(比如-Zoo)默认是继承Enum的。(因此此时的Zoo不能再继承任何class类,但是可以实现interface接口)
            //不能有public 构造方法,为保证用户无法再创建枚举实例
            //(覆盖父类)构造方法要私有
            this.name = name;
            this.ordenal = ordinal;

        }

        public void setZooCowName(String name){
            enumMap.put(Zoo.COW, name);
        }

    }

  • 枚举元素自定义用法
enum Zoo {
        //这种自定义方法的,要在最后一个后面加分号 ";",并且要重写和下面参数对应的构造方法
        //关键是这种枚举值的定义要放在首位
            ELEPHANT{
            @Override
            public String getAnimalName() {
                return super.getAnimalName();
            }
        }, LION{
            @Override
            public String getAnimalName() {
                return super.getAnimalName();
            }
        }, COW{
            @Override
            public String getAnimalName() {
                return super.getAnimalName();
            }
        };

        public String getAnimalName(){
            //"这里随便写了一个获取动物名称的方法,为了让自定义元素去实现这个方法,完成自定义元素的目的"
            String cowName = Zoo.COW.getAnimalName();
            return cowName;
        }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值