枚举的主流使用方式

来源:互联网 发布:网络营销模拟软件 编辑:程序博客网 时间:2024/06/10 21:15

枚举的好处

  • 保证类型安全
  • 够直观

枚举的主流用法

  • 普通常量用法
    //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;        }    }

原创粉丝点击