Java enum 取代 if-else

本文介绍了一种使用枚举(enum)优化Redis SET命令参数解析的方法,避免了传统if-else语句的繁琐,提高了代码的可读性和维护性。通过定义枚举类型对应不同的参数选项,并为每个枚举值实现特定的解析逻辑,实现了参数的高效解析。

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

最近用 java 做 redis-server 的实现, 很多命令行参数的地方,例如:
STRING 有个操作 SET key value [EX seconds] [PX milliseconds] [NX|XX] 参数说明见这里.
常规做法是

String args[] = .... // 参数列表
Params param = new Params(); // 解析后的参数
for (int i = 0; i < args.length; i++) {
   if (args[i].equalsIgnoreCase("ex")) {
       param.milliseconds = args[i + 1] * 1000;
   } else if (args[i].equalsIgnoreCase("px")) {
       param.milliseconds = args[i + 1];
   }
   ....
}

现在我们用 enum (枚举) 来取代 if-else
首先我们 创建一个 enum , 使用参数的前缀 key 作为 name :

public enum Parser {
    EX, PX, NX, XX
}

我们添加一个抽象的方法 public abstract int parse(SetParams params, String[] args, int i); 根据字符串参数解析需要参数.返回最后被解析的字符串位置.

public enum Parser {
    EX, PX, NX, XX;
    public abstract int parse(Params params, String[] args, int i);
}

然后我们对每个枚举元素, 实现该方法

public enum Parser {
    EX {
        @Override
        public int parse(Params params, String[] args, int i) {
            params.ex = args[i + 1].byteArray2int();
            return i + 1;
        }
    },
    PX {
        @Override
        public int parse(Params params, String[] args, int i) {
            params.px = args[i + 1].byteArray2long();
            return i + 1;
        }
    },
    NX {
        @Override
        public int parse(Params params, String[] args, int i) {
            params.nx = true;
            return i;
        }
    },
    XX {
        @Override
        public int parse(Params params, String[] args, int i) {
            params.xx = true;
            return i;
        }
    };

    public abstract int parse(Params params, String[] args, int i);
}

这样我们就可以用取代 if-else 了:

String args[] = .... // 参数列表
Params param = new Params(); // 解析后的参数
for (int i = 0; i < args.length; i++) {
    String op = args[i];
    Parser pm = Parser.valueOf(op.toUpperCase());
    i = pm.parse(spm, args, i);
}

(完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值