zoukankan      html  css  js  c++  java
  • 【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(); // 接口方法
    }
  • 相关阅读:
    Rotation Kinematics
    离职 mark
    PnP 问题方程怎么列?
    DSO windowed optimization 代码 (4)
    Adjoint of SE(3)
    IMU 预积分推导
    DSO windowed optimization 代码 (3)
    DSO windowed optimization 代码 (2)
    OKVIS 代码框架
    DSO windowed optimization 代码 (1)
  • 原文地址:https://www.cnblogs.com/mindzone/p/12736434.html
Copyright © 2011-2022 走看看