• 【Java】Enumeration Class 枚举类


    枚举类 enum 对象是有限的确定的、属于类的(静态的)

    适合定义一组常量

    例如固定的一些事物:

    - 季节

    - 性别

    - 状态

    自定义枚举类的使用

    public class EnumerationTest {
        /*
            枚举类的使用
            1 类的对象有限,确定的
            2 适合定义一组常量
            3 枚举只有一个对象就可以是单例模式的实现方式
         */
        public static void main(String[] args) {
            EnumerationClass status01 = EnumerationClass.STATUS01;
            System.out.println(status01);
            Integer statusID = status01.getStatusID();
        }
    }
    
    //  JDK5.0之前,编写我们自己的枚举类
    //  JDK5.0之后,使用enum关键字声明枚举类
    class EnumerationClass{
        // 自定义枚举类
        private String statusName;
        private Integer statusID;
    
        // 私有化构造器,不可调用new 创建
        private EnumerationClass(String statusName,Integer statusID){
            this.statusName = statusName;
            this.statusID = statusID;
        }
    
        // 声明我们的对象常量,这些对象允许被公开访问 public
        public static final EnumerationClass STATUS01 = new EnumerationClass("枚举类状态对象01",1001);
        public static final EnumerationClass STATUS02 = new EnumerationClass("枚举类状态对象02",1002);
        public static final EnumerationClass STATUS03 = new EnumerationClass("枚举类状态对象03",1003);
        public static final EnumerationClass STATUS04 = new EnumerationClass("枚举类状态对象04",1004);
    
        // 属性的setter & getter
        public String getStatusName() { return statusName; }
        public void setStatusName(String statusName) { this.statusName = statusName; }
        public Integer getStatusID() { return statusID; }
        public void setStatusID(Integer statusID) { this.statusID = statusID; }
    
        // toString 方法
        @Override
        public String toString() {
            return "EnumerationClass{" +
                    "statusName='" + statusName + '\'' +
                    ", statusID=" + statusID +
                    '}';
        }
    }

    使用Enum声明枚举类:

    public enum EnumerationClass {
        //  枚举类的枚举对象,必须在第一行声明,如果没有,也要使用一个分号结束,表示没有枚举对象
        STATUS01("状态对象01",1001),
        STATUS02("状态对象02",1002),
        STATUS03("状态对象03",1003),
        STATUS04("状态对象04",1004);
    
        //  枚举对象也可以声明字段
        private String enumName;
        private Integer enumID;
    
        // 枚举对象也可以有构造器,这个构造器不可被外界访问
        EnumerationClass(String enumName, Integer enumID) {
            this.enumName = enumName;
            this.enumID = enumID;
        }
        
        // 也可以声明setter & getter
        public String getEnumName() { return enumName; }
        public void setEnumName(String enumName) { this.enumName = enumName; }
        public Integer getEnumID() { return enumID; }
        public void setEnumID(Integer enumID) { this.enumID = enumID; }
        
        @Override
        public String toString() {
            return "EnumerationClass{" +
                    "enumName='" + enumName + '\'' +
                    ", enumID=" + enumID +
                    '}';
        }
    }

     Enum枚举父类 的常见方法

    - values() 返回枚举类的对象数组,用来遍历所有枚举对象

    - valueOf(String str)方法 ,获取字符串转换为枚举类的对象,字符串必须是对象的标识符,如果枚举类没有此字符枚举项,则发生不合理的参数异常

    - toString()默认返回枚举对象名称

    public class EnumerationTest {
        public static void main(String[] args) {
    
            // 根据参数名字返回枚举类的对应标识符的枚举对象,如果没有报不合理的参数异常
            EnumerationClass status04 = EnumerationClass.valueOf("STATUS04");
            System.out.println(status04);
    
            // 返回这个枚举类的所有枚举对象 是一个对象数组
            EnumerationClass[] instances = EnumerationClass.values();
    
            // 遍历所有枚举对象 ,可以查看有哪些枚举项
            for (EnumerationClass ec:instances) {
                System.out.println(ec); // 调用的toString方法 默认返回对象的表示名称,可以重写
            }
        }
    }

    使用枚举类实现接口

    - 因为enum枚举类已经继承了Enum枚举总抽象类,和Object原型类,不能在继承任何类了

    - 但可以实现接口

    public enum EnumerationClass implements Plug{
        //  枚举类的枚举对象,必须在第一行声明,如果没有,也要使用一个分号结束,表示没有枚举对象
        STATUS01("状态对象01",1001),
        STATUS02("状态对象02",1002),
        STATUS03("状态对象03",1003),
        STATUS04("状态对象04",1004);
    
        //  枚举对象也可以声明字段
        private String enumName;
        private Integer enumID;
    
        // 枚举对象也可以有构造器,这个构造器不可被外界访问
        EnumerationClass(String enumName, Integer enumID) {
            this.enumName = enumName;
            this.enumID = enumID;
        }
    
        // 也可以声明setter & getter
        public String getEnumName() { return enumName; }
        public void setEnumName(String enumName) { this.enumName = enumName; }
        public Integer getEnumID() { return enumID; }
        public void setEnumID(Integer enumID) { this.enumID = enumID; }
    
        @Override
        public String toString() {
            return "EnumerationClass{" +
                    "enumName='" + enumName + '\'' +
                    ", enumID=" + enumID +
                    '}';
        }
    
        @Override
        public void plugMethod() {
            System.out.println("实现接口方法!!!");
        }
    }
    
    // 声明一个接口
    interface Plug{
        void plugMethod(); // 接口方法
    }

    除了在枚举类里面实现同一的接口方法

    也可以匿名实现

    public enum EnumerationClass implements Plug{
        //  枚举类的枚举对象,必须在第一行声明,如果没有,也要使用一个分号结束,表示没有枚举对象
        STATUS01("状态对象01",1001){
            
            @Override
            public void plugMethod(){
                System.out.println("匿名实现接口方法1");
            }
        },
        STATUS02("状态对象02",1002){
    
            @Override
            public void plugMethod(){
                System.out.println("匿名实现接口方法2");
            }
        },
        STATUS03("状态对象03",1003){
    
            @Override
            public void plugMethod(){
                System.out.println("匿名实现接口方法3");
            }
        },
        STATUS04("状态对象04",1004){
    
            @Override
            public void plugMethod(){
                System.out.println("匿名实现接口方法4");
            }
        };
    
        //  枚举对象也可以声明字段
        private String enumName;
        private Integer enumID;
    
        // 枚举对象也可以有构造器,这个构造器不可被外界访问
        EnumerationClass(String enumName, Integer enumID) {
            this.enumName = enumName;
            this.enumID = enumID;
        }
    
        // 也可以声明setter & getter
        public String getEnumName() { return enumName; }
        public void setEnumName(String enumName) { this.enumName = enumName; }
        public Integer getEnumID() { return enumID; }
        public void setEnumID(Integer enumID) { this.enumID = enumID; }
    
        @Override
        public String toString() {
            return "EnumerationClass{" +
                    "enumName='" + enumName + '\'' +
                    ", enumID=" + enumID +
                    '}';
        }
    
       
    }
    
    // 声明一个接口
    interface Plug{
        void plugMethod(); // 接口方法
    }
  • 相关阅读:
    IE6,IE7,IE8,Firefox 兼容的css hack以及常见兼容性问题
    BAT及各大互联网公司2014前端笔试面试题:HTML/CSS/JAVASCRIPT
    C语言学习
    HDU 3861 The King’s Problem 最小路径覆盖(强连通分量缩点+二分图最大匹配)
    HDU 2089 不要62【解题报告】
    POJ2762 Going from u to v or from v to u? 强连通分量缩点+拓扑排序
    HDU 1754 线段树入门解题报告
    2019/4/22 kmp模板
    2019/4/22 拓扑排序的高效写法. 模板题HDU1285:确定比赛名次
    HDU 2544最短路 【dijkstra 链式前向星+优先队列优化】
  • 原文地址:https://www.cnblogs.com/mindzone/p/12736434.html
Copyright © 2020-2023  润新知