2015年公务员考试行测:枚举类型的枚举定义分析(一)

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 带参数枚举的定义

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

必须声明符合实例对象的内部私有构造函数

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、开关选择结构体支持的类型字节

字符

int

Enum(枚举,JDK1.5增加)

字符串(添加到 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;
}

© 版权声明
THE END
喜欢就支持一下吧
点赞97 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片