• 枚举类


    什么是枚举类?让我们来看看Oracle的java指南的解释。

    An enum type is a special data type that enables for a variable to be a set of predefined constants. The variable must be equal to one of the values that have been predefined for it. Common examples include compass directions (values of NORTH, SOUTH, EAST, and WEST) and the days of the week.
    枚举类型是一种特殊的数据类型,它允许变量是一组预定义常量。变量必须等于为其预定义的值之一。常见的例子包括指南针方向(北、南、东、西的值)和星期几。

    再结合一个例子

    public enum Weekday {
        SUN(0),
        MON(1),
        TUS(2),
        WED(3),
        THU(4),
        FRI(5),
        SAT(6);
    
        private Integer value;
    
        Weekday(Integer value) {
            this.value = value;
        }
    
        public Integer getValue() {
            return value;
    
        }
    
        public static Weekday getEnums(int value) {
            switch (value) {
                case 0:
                    return SUN;
                case 1:
                    return MON;
                case 2:
                    return TUS;
                case 3:
                    return WED;
                case 4:
                    return TUS;
                case 5:
                    return FRI;
                case 6:
                    return SAT;
                default:
                    return null;
            }
        }
    }
    

    这个例子就是一个简单的枚举类型。通过它,我们可以轻易的获得星期几和他对应的数值。

            for (Weekday w : Weekday.values()) {
                System.out.println("Value:"+ w.getValue());
                System.out.println("name:"+ Weekday.getEnums(w.getValue()));
            }
    //输出结果
    Value:0
    name:SUN
    Value:1
    name:MON
    Value:2
    name:TUS
    Value:3
    name:WED
    Value:4
    name:TUS
    Value:5
    name:FRI
    Value:6
    name:SAT
    

    为什么不用静态常量来替代枚举类呢?

    枚举类更加直观,类型安全。使用常量会有以下几个缺陷:

      1. 类型不安全。若一个方法中要求传入季节这个参数,用常量的话,形参就是int类型,开发者传入任意类型的int类型值就行,但是如果是枚举类型的话,就只能传入枚举类中包含的对象。

      2. 没有命名空间。开发者要在命名的时候以SEASON_开头,这样另外一个开发者再看这段代码的时候,才知道这四个常量分别代表季节。

    参考文献

    重新认识java(十) ---- Enum(枚举类)
    【JAVA】浅谈java枚举类

  • 相关阅读:
    1052. 爱生气的书店老板
    766. 托普利茨矩阵
    643.子数组的最大平均数I
    450. 删除二叉搜索树中的节点
    1489.找到最小生成树里的关键边和伪关键边
    839相似字符串
    1631.最小体力消耗路径
    SnowFlake雪花算法源码分析&灵活改造,常见分布式ID生成解决方案
    【目标检测】三、Faster R-CNN与R-FCN
    【目标检测】二、Fast R-CNN与SVD
  • 原文地址:https://www.cnblogs.com/zllk/p/14011028.html
Copyright © 2020-2023  润新知