• 枚举


    枚举

    public enum EnumDay{
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THRUSDAY, FRIDAY, SATURDAY;
    }

    这就定义了SUNDAY~SATURDAY的枚举了。

    上面的EnumDay其实隐含了所创建的类型都是java.lang.Enum类的子类,枚举类型符合通用模式Class Enum<E extends Enum<E>>,E表示的就是枚举类型的名称。枚举类型的每

    一个值都将映射到protected Enum<String name, int ordinal>构造函数中,在这里,每个值的名称都被转换为一个字符串,并且序数设置表示了此设置被创建的顺序。

    new Enum<EnumDay>("SUNDAY", 0);
    new Enum<EnumDay>("MONDAY", 1);
    new Enum<EnumDay>("TUESDAY", 2);
    new Enum<EnumDay>("WEDNESDAY", 3);
    new Enum<EnumDay>("THRUSDAY", 4);
    new Enum<EnumDay>("FRIDAY", 5);
    new Enum<EnumDay>("SATURDAY", 6);

    所以,每个枚举值都是一个泛型为EnumDay的Enum就可以了。

    EnumDay sunday = EnumDay.SUNDAY;

    遍历枚举类型及枚举方法

    既然知道了枚举类型里面的枚举值都是一个Enum<EnumDay>,那就好办了,可以查看JDK API来看下Enum里面有哪些方法并使用下,看一下例子:

    详情见参考。

    为枚举类型中的枚举值定义数值----自定义属性和方法

    重写了两次toString()方法,自定义getValue()方法,自定义属性value。

    public enum EnumDay{
        SUNDAY(123), MONDAY(234), TUESDAY(345), WEDNESDAY(456), THURSDAY(567), FRIDAY(678), SATURDAY(789){
            @Override
            public String toString() {
                return "aaa-" + getValue();
            }
        };
    
        @Override
        public String toString() {
            return "bbb-" + getValue();
        }
    
        private int value;
        private EnumDay(Integer value){
            this.value = value;
        }
    
        public int getValue() {
            return value;
        }
    
        public static void main(String[] args) {
            EnumSet<EnumDay> enumDays = EnumSet.allOf(EnumDay.class);
            for(EnumDay enumDay : enumDays) {
                System.out.println(enumDay.name() + ": " + enumDay.toString());
            }
            System.out.println("=============");
            for(EnumDay enumDay : enumDays) {
                System.out.println(enumDay.getValue() + "===" + enumDay.value);
            }
        }
    
    }

    结果:

    SUNDAY: bbb-123
    MONDAY: bbb-234
    TUESDAY: bbb-345
    WEDNESDAY: bbb-456
    THURSDAY: bbb-567
    FRIDAY: bbb-678
    SATURDAY: aaa-789
    =============
    123===123
    234===234
    345===345
    456===456
    567===567
    678===678
    789===789

    枚举中的每一个(类似SUNDAY、MONDAY。。。),都是一个泛型为EnumDay的Enum,toString()时自己有就用自己的,没有的话就用公共的。

    EnumSet、EnumMap

    EnumSet和EnumMap是分别为枚举类型定制的Set和Map,看一下它们的用法:

    public enum EnumDay{
        SUNDAY(123), MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
    
        private int value;
        private EnumDay(Integer value){
            this.value = value;
        }
        private EnumDay(){
    
        }
    
        public int getValue() {
            return value;
        }
    
        public static void main(String[] args) {
            EnumSet<EnumDay> enumDays = EnumSet.allOf(EnumDay.class);
            for(EnumDay enumDay : enumDays) {
                System.out.println(enumDay.name() + ":" + enumDay.getValue());
            }
            
            EnumMap<EnumDay, String> enumMap = new EnumMap<>(EnumDay.class);
            enumMap.put(EnumDay.SUNDAY,"星期天");
            enumMap.put(EnumDay.MONDAY,"星期一");
            enumMap.put(EnumDay.TUESDAY,"星期二");
            enumMap.put(EnumDay.WEDNESDAY,"星期三");
    
            Iterator<Map.Entry<EnumDay, String>> iterator = enumMap.entrySet().iterator();
            while(iterator.hasNext()){
                Map.Entry<EnumDay, String> next = iterator.next();
                System.out.println(next.getKey().name() + ":" + next.getValue());
            }
    
        }
    
    }

    结果:

    SUNDAY:123
    MONDAY:0
    TUESDAY:0
    WEDNESDAY:0
    THURSDAY:0
    FRIDAY:0
    SATURDAY:0
    SUNDAY:星期天
    MONDAY:星期一
    TUESDAY:星期二
    WEDNESDAY:星期三

    注意一下EnumSet和EnumMap都是线程非安全的。

    参考资料:

    https://www.cnblogs.com/xrq730/p/4890313.html

  • 相关阅读:
    Spring配置文件中指定init-method属性的作用
    Spring中的InitializingBean接口
    java中的instanceof用法
    mybatis中useGeneratedKeys和keyProperty的作用
    (转载)springboot集成httpinvoker的客户端
    (转载)spring 之间的远程调用-Spring Http调用的实现
    (转载)maven profile多环境自动切换配置
    (转载)使用Maven构建多模块项目
    python3 之logging模块
    python3之编码
  • 原文地址:https://www.cnblogs.com/zfyang2429/p/10337151.html
Copyright © 2020-2023  润新知