Java Switch中使用多字段的枚举类

本文介绍了如何在Java 8的Switch语句中利用枚举类MsgTypeEnums,通过替换字符串,提升代码的可读性和减少错误。通过列举MsgTypeEnums枚举类实例和seata源码中的应用实例,展示了如何在实际开发中优化Switch语句。

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

介绍

Java8 开始 Switch中可以使用String;为了提升代码的可靠性与重用性,可以将String类型换成枚举类,每次将String入参处理成枚举类再进行匹配;

实际开发任务中很多使用也会在Switch中使用枚举类,此处做个总结;

1、枚举类

MsgTypeEnums枚举类中有两个字段:tableName、msgType:

@Getter
public enum MsgTypeEnums {

    /**
     * 大件正向
     */
    BIG_TICKET_NORMAL("table1", "BIG_TICKET_NORMAL"),

    /**
     * 小件正向
     */
    SMALL_TICKET_NORMAL("table2", "SMALL_TICKET_NORMAL"),

    /**
     * 大件取消
     */
    BIG_TICKET_CANCEL("table3", "BIG_TICKET_CANCEL"),

    /**
     * 小件取消
     */
    SMALL_TICKET_CANCEL("table4", "SMALL_TICKET_CANCEL"),

    /**
     * 大件退货
     */
    BIG_TICKET_RETURN("table5", "BIG_TICKET_RETURN"),

    /**
     * 小件退货
     */
    SMALL_TICKET_RETURN("table6", "SMALL_TICKET_RETURN"),

    /**
     * 撤销交易
     */
    RESCIND_TRADE("table7", "RESCIND_TRADE");

    /**
     * 表名
     */
    private String tableName;

    /**
     * 消息类型
     */
    private String msgType;

    MsgTypeEnums(String tableName, String msgType) {
        this.tableName = tableName;
        this.msgType = msgType;
    }

    public static MsgTypeEnums getMsgType(String msgType) {
        for (MsgTypeEnums value : MsgTypeEnums.values()) {
            if (value.msgType.equalsIgnoreCase(msgType)) {
                return value;
            }
        }
        // 理论上不会走进这里
        throw new IllegalArgumentException("unknown msgType:" + msgType);
    }
}

2、Switch语句

    public void testMsgType(String msgType) {

        MsgTypeEnums msgType = MsgTypeEnums.getMsgType(msgType);
        switch (msgType) {
            case BIG_TICKET_NORMAL:
                // do something
                System.out.println("----");
                break;
            case SMALL_TICKET_NORMAL:
                // do something
                break;
            default:
                throw new IllegalArgumentException("unsupported.");
        }

    }

注意:case上使用的是枚举类型,不需要加枚举类类名;而switch输入枚举类实例。

3、源码中的使用

前一段时间看seata源码,隐约记得它有用过,如下;

1> 枚举类:

在这里插入图片描述

2> switch语句:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃秃爱健身

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值