前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java实用类(一)-Enum(枚举)

Java实用类(一)-Enum(枚举)

作者头像
化羽羽
发布2022-10-28 11:32:29
5130
发布2022-10-28 11:32:29
举报
文章被收录于专栏:化羽学Java

1、 历史

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

2、枚举的定义

2.1 简单枚举定义

GenderEnum 性别枚举

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

测试

代码语言:javascript
复制
 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 用户状态枚举

代码语言:javascript
复制
/*
    用户状态
 */
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;
    }
}

测试

代码语言:javascript
复制
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选择允许值都必须是枚举类型声明的实例常量;

代码语言:javascript
复制
 //验证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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、 历史
  • 2、枚举的定义
    • 2.1 简单枚举定义
      • 2.2 带参枚举定义
      • 3、Switch选择结构支持的类型
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档