Java实用类-Enum(枚举)

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;
}
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Java实用类-Enum(枚举)