Java Enum 枚举用法 遍历枚举 获取枚举对象

本文详细介绍了Java中枚举类型的使用,包括如何创建枚举对象,遍历枚举,以及根据枚举值获取枚举对象的两种方法。此外,还展示了如何使用枚举简化条件判断,提高代码可读性和维护性。同时,文章指出枚举定义时应注意变量的final和访问权限,并提供了相应的修正示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java Enum 枚举用法 遍历枚举 获取枚举对象

一、创建一个枚举对象

        1、代码如下:


import java.util.Arrays;
import java.util.Iterator;
import java.util.Optional;

/**
 * Description: 异常类型枚举
 * @author w
 * @version 1.0
 * @date 2022/8/1 19:47
 */
public enum ExpEnum {

    PWD_ERROR("5001","密码错误"),

    INNER_ERROR("5002","内部错误"),

    OTHER_ERROR("5005","其他错误");

    private String code ;
    private String msg ;

    ExpEnum(String code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    /**@Description: 根据code获取枚举对象
     * @param code
     * @return
     * @version v1.0
     * @author wu
     * @date 2022/8/1 20:28
     */
    public static ExpEnum get(String code){
        Iterator<ExpEnum> iterator = Arrays.stream(ExpEnum.values()).iterator();
        while (iterator.hasNext()){
            ExpEnum next = iterator.next();
            if(next.code.equals(code)){
                return next ;
            }
        }
        return null;
    }

    /**@Description: 根据code获取枚举对象 --- Java8方式
     * @param
     * @return
     * @version v1.0
     * @author wu
     * @date 2022/8/1 20:30
     */
    public static ExpEnum getByJava8(String code){
        Optional<ExpEnum> first = Arrays.stream(ExpEnum.values()).filter(e -> e.code.equals(code)).findFirst();
//        ExpEnum expEnum = first.get();
        ExpEnum expEnum = first.orElse(null);
        return expEnum;
    }
}

二、测试

        1、遍历枚举、获取枚举对象的值

 /**@Description: 遍历枚举
     * @return
     * @version v1.0
     * @author wu
     * @date 2022/8/1 20:32
     */
    @Test
    public void forEachTest(){
        ExpEnum[] values = ExpEnum.values();
        for (ExpEnum e : values) {
            System.out.println(e.ordinal() + ",name :"+ e.name()+ ",code:"+e.getCode() +", msg:"+e.getMsg() );
        }
    }

    /**@Description: 获取枚举对象
     * @version v1.0
     * @author wu
     * @date 2022/8/1 20:35
     */
    @Test
    public void getTest(){
        ExpEnum expEnum = ExpEnum.get("5001");
        System.out.println(expEnum);
    }

    /**@Description: 获取枚举对象 --- Java8
     * @version v1.0
     * @author wu
     * @date 2022/8/1 20:37
     */
    @Test
    public void getByJava8Test(){
        ExpEnum byJava8 = ExpEnum.getByJava8("5002");
        System.out.println(byJava8);
    }

三、使用枚举简化多个if else        

        1、原代码情况

public String process(String code){
        String res = null ;
        if("1".equals(code)){
            res = "状态一 if";
        }else if("2".equals(code)){
            res = "状态二 if";
        }else if("3".equals(code)){
            res = "状态三 if";
        }else if("4".equals(code)){
            res = "状态四 if";
        }
        return  res;
    }

        

        2、使用枚举Enum简化,代码如下:

    public String process2(String code){
        return Status.get(code).msg;
    }

    static enum Status {

        ONE("1","状态一"),
        TWO("2","状态二"),
        THREE("3","状态三"),
        FOUR("4","状态四");

        private String code ;
        private String msg;

        Status(String code, String msg) {
            this.code = code;
            this.msg = msg;
        }

        public String getCode() {
            return code;
        }

        public void setCode(String code) {
            this.code = code;
        }

        public String getMsg() {
            return msg;
        }

        public void setMsg(String msg) {
            this.msg = msg;
        }

        public static Status get(String code){
            Status status = Arrays.stream(Status.values()).filter(e -> e.getCode().equals(code)).findFirst().orElse(null);
            return status;
        }
    }

        

四、枚举enum创建定义流程

        1、枚举定义可能的问题

        ( 2023年10月16日22:55:07 )

enum MoreEnum{
    OK(1,"11","bj"),
    YES(2,"22","sh");

    /**
     * 不需要 private 修饰,默认就是
     */
    private   int id ;
    /**
     * 缺少final 修饰,会被修改
     */
    String name ;
    /**
     * 正确定义格式: 增加final修饰,去掉private
     */
    final String addr  ;


    MoreEnum(int id,String name ,String addr) {
        this.id = id;
        this.name = name;
        this.addr = addr;
    }
}

        1.1、针对MoreEnum枚举测试

public static void main(String[] args) {

        System.out.println(MoreEnum.OK.id);
        // 注意: id 没有被final修饰,会被修改的
        MoreEnum.OK.id = 123;
        // 输出结果是: 123 
        System.out.println(MoreEnum.OK.id);

        /**
         * final修饰后,枚举值,不允许修改
         * Cannot assign a value to final variable 'addr'
         */
//        MoreEnum.OK.addr="nj";
    }

        2、枚举定义流程

      • 步骤是: 先定义枚举值, 再定义枚举参数
      • 去掉 private 修饰符, 默认就是 private 修饰的
      • 增加 final 修饰,避免枚举值被修改
      • 正确格式: final String addr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值