百木园-与人分享,
就是让自己快乐。

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;
}

来源:https://www.cnblogs.com/xiaoqigui/p/16385123.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Java实用类-Enum(枚举)