• Java实用类-Enum(枚举)


    1、 历史

    ​ 在 JDK 1.5 之前没有枚举类型,那时候一般用接口常量来替代(例如,public static final String male )。JKD1.5之后使用 Java 枚举类型 enum 可以更贴近地表示这种常量。

    2、枚举的定义

    2.1 简单枚举定义

    GenderEnum 性别枚举

    /*
        性别枚举
     */
    public enum  GenderEnum {
        //定义枚举类型的变量(所有定义的变量都是当前枚举类型的实例名)
        //默认所有的定义变量,都是public static final 类型,不需要手动声明,而且一般都是大写
        MAN,WOMAN
    }
    

    测试

     public static void main(String[] args) {
            Student student = new Student();
            student.setStuNo("S001");
            student.setStuName("张三");
            //枚举类型赋值,都只能赋值为枚举中已经定义的实例名
            student.setGender(GenderEnum.MAN);
            student.setGender(GenderEnum.WOMAN);
            //非指定枚举类型,都不需要赋值,编译异常
            //student.setGender("男");
            student.setStuAge(20);
    
            System.out.println(student);
    
        }
    

    运行结果:

    2.2 带参枚举定义

    1. 必须声明内部私有属性,方便获取枚举类型实例的参数值

    2. 必须声明跟实例对象相符合的内部私有构造方法

    3. 对外声明get方法,只允许通过枚举的实例获取对应参数,不允许setter方法,枚举实例是通过构造方法初始化的

    UserStatusEnum 用户状态枚举

    /*
        用户状态
     */
    public enum  UserStatusEnum {
        //带参数枚举类型
        STATUS_NORMAL("0","正常"),
        STATUS_LOCK("1","锁定"),
        STATUS_OFF("1","注销");
    
        //必须声明内部私有属性,方便获取枚举类型实例的参数值
        private String statusCode;
        private String statusMsg;
    
    
        //必须声明跟实例对象相符合的内部私有构造方法
        private UserStatusEnum(String statusCode,String statusMsg){
            this.statusCode = statusCode;
            this.statusMsg = statusMsg;
        }
    
        //对外声明get方法,只允许通过枚举的实例获取对应参数,不允许setter方法,枚举实例是通过构造方法初始化的
        public String getStatusCode() {
            return statusCode;
        }
    
        public String getStatusMsg() {
            return statusMsg;
        }
    
        //一般,在枚举类中,要提供一个静态的普通方法,当你不知道枚举的定义,
        //只知道状态码时,方便获取对应的说明
        public static String getMegsByCode(String statusCode){
            //枚举的遍历
            for (UserStatusEnum statusEnum : UserStatusEnum.values()){
                //判断传入的状态码,是否在内部定义中存在
                if(statusEnum.statusCode.equals(statusCode)){
                    return statusEnum.statusMsg;
                }
            }
            //不存在
            return null;
        }
    }
    

    测试

    public class TestUserStatusEnum {
        public static void main(String[] args) {
            //测试带参枚举
            //假设当前用户状态枚举是锁定
            System.out.println(UserStatusEnum.STATUS_NORMAL.getStatusCode()); //0
            System.out.println(UserStatusEnum.STATUS_NORMAL.getStatusMsg());  //正常
            //假设当前用户状态枚举是注销
            System.out.println(UserStatusEnum.STATUS_OFF.getStatusCode()); //1
            System.out.println(UserStatusEnum.STATUS_OFF.getStatusMsg());  //注销
    
            //测试枚举提供的普通方法
            //假设知道用户的状态是0,如何获取对应的说明
            System.out.println(UserStatusEnum.getMegsByCode("0")); //正常
    
        }
    }
    
    

    3、Switch选择结构支持的类型

    byte
    char
    short
    int
    Enum(枚举,JDK1.5增加)
    String (JDK1.7增加)

    注意:一旦入参是一个枚举类型的实例,所有的case选择允许值都必须是枚举类型声明的实例常量;

     //验证switch选择结构支持的类型:int及以下(int short char byte) 枚举 String
    switch(UserStatusEnum.STATUS_NORMAL){  //正常
            //一旦入参是一个枚举类型的实例,所有的选择允许值都必须是枚举类型声明的实例常量
        case STATUS_OFF:
            System.out.println("注销");
            break;
        case STATUS_LOCK:
            System.out.println("锁定");
            break;
        case STATUS_NORMAL:
            System.out.println("正常");
            break;
    }
    
  • 相关阅读:
    新零售系统平台解决方案 线上线下小程序怎么做
    hugo学习笔记
    船舶稳定性和静水力计算——绘图体平面图,静水力,GZ计算(Matlab代码实现)
    VMware 虚拟机中 Linux 系统Centos7磁盘空间扩容
    配置IPv4静态路由,轻松搭建高效网络通道
    第二证券|小鹏持续萎靡,理想蔚来逆势反弹破月销记录
    面试软件测试工程师时可能会遇到的几个常见问题
    Mybatis日志系统
    使用postman 调用 Webservice 接口
    传统语音增强——基本的维纳滤波语音降噪算法
  • 原文地址:https://www.cnblogs.com/xiaoqigui/p/16385123.html