美文网首页
Java枚举类

Java枚举类

作者: 轻轻敲醒沉睡的心灵 | 来源:发表于2021-05-12 18:15 被阅读0次

    在Java中,我们可以通过static final来定义常量。例如,我们希望定义周一到周日这7个常量,可以用7个不同的int表示:

    public class Weekday {
        public static final int SUN = 0;
        public static final int MON = 1;
        public static final int TUE = 2;
        public static final int WED = 3;
        public static final int THU = 4;
        public static final int FRI = 5;
        public static final int SAT = 6;
    }
    

    使用常量的时候,可以这么引用:

    if (day == Weekday.SAT || day == Weekday.SUN) {
        // TODO: work at home
    }
    

    也可以把常量定义为字符串类型,例如,定义3种颜色的常量:

    public class Color {
        public static final String RED = "r";
        public static final String GREEN = "g";
        public static final String BLUE = "b";
    }
    

    使用常量的时候,可以这么引用:

    String color = "red";
    if (Color.RED.equals(color)) {
        // TODO:
    }
    

    1. 枚举

    类似上面一些特殊业务的常量,可以用枚举来表示。枚举使用关键字enum

    • 星期
    public enum Weekday {
        MON, TUE, WED, THU, FRI, SAT, SUN;
    }
    
    • 颜色
    public enum Color {
        RED, GREEN, BLUE;
    }
    

    枚举类和其他类基本没什么区别,但有几点需要注意:

    • 每个枚举的值都是当前class实例(RED 的类型是 Color)
    • 定义的enum类型总是继承自java.lang.Enum,且无法被继承(因枚举类是final的);
    • 只能定义出enum的实例,而无法通过new操作符创建enum的实例;
    • 定义的每个实例都是引用类型的唯一实例;
    • 枚举类实例的方法:
      • name():返回常量名,String s = Weekday.SUN.name(); // "SUN"
      • ordinal():返回定义的常量的顺序,从0开始计数,int n = Weekday.MON.ordinal(); // 1

    2. 枚举的用法

    这里用一个最常用的来说明,在定义code和message的时候。
    向枚举类中添加自定义属性和构造函数

     public enum CodeMsg {
        SUCCESS("1000", "success"),
        ERROR("4000", "error");
        
        @Getter
        private String code;
        @Getter
        private String msg;
    
        CodeMsg (String code, String msg) {
            this.code = code;
            this.msg = msg;
        }
     }
    

    使用时:

    public class Main {
        public static void main(String[] args) {
            System.out.println(CodeMsg.SUCCESS.getCode());
            System.out.println(CodeMsg.SUCCESS.getMsg());
        }
    }
    

    相关文章

      网友评论

          本文标题:Java枚举类

          本文链接:https://www.haomeiwen.com/subject/fdcadltx.html