代码优化:常量中枚举与表驱动的应用

代码优化:常量中枚举与表驱动的应用

常量的简单理解就是不会变化的量,在我们程序开发时总会遇到这么一些,例如状态类:开机/关机/异常,颜色类:黄/红/蓝/绿 等等。运用的方式也有很多,直接声明或写死(以前年轻经常这么干以为很省事,事实证明修改及出问题排查时给自己找不痛快,极度不推荐)、常量类、枚举等。此次我们这里不讨论用哪种方式,我主要用的枚举并应用了下表驱动,下面我们直接以代码说明。

先上个我以前写的,或者说是常用的通过值获取枚举的方法:

public static MyEnum getByCode(int code) {
    for (MyEnum element : values()) {
        if (element.code.equals(code)) {
            return element;
        }
    }
    return null;
}

看看你之前是不是这么写的?我之前就是这么写的,写时觉得哪里有些不对,但也挺整洁,由于项目进度问题当时也不去过多考虑,之后想想这样岂不是每次获取都遍历一遍?虽然知道可能会影响效率、不优雅,但也不知道该如何去改~ 后来了解到了表驱动这么个概念,其实早在N年前就知道了( 从《代码大全》中看的,有兴趣的可以看看 ),讲的是运用数组来简化if…else if或switch的方法,那时候就是觉得一个字妙,但实际我并没有懂,只是有个印象,并没有举一反三运用知识去处理实际问题,后来我想到了去运用,但是又不知该从何下手,但也有了大致方向,通过查阅资料以及实践等重复造轮子… 好了不讲历史了直接上代码。

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: Wenx
 * @Description: 枚举表驱动示例
 * @Date: Created in 2018/11/5 11:02
 * @Modified By:
 */
public enum MyEnum {
    /**
     * 00=开机
     */
    STARTUP(0x00, "开机"),
    /**
     * 01=关机
     */
    SHUTDOWN(0x01, "关机"),
    /**
     * 02=锁定
     */
    LOCKING(0x02, "锁定");

    /**
     * 编码
     */
    private final int code;
    /**
     * 名称
     */
    private final String name;

    private static final Map<Integer, MyEnum> MAP = new HashMap<>();

    static {
        for (MyEnum element : values()) {
            MAP.put(element.code, element);
        }
    }

    MyEnum(int code, String name) {
        this.code = code;
        this.name = name;
    }

    public int getCode() {
        return code;
    }

    public String getName() {
        return name;
    }

    public static MyEnum getByCode(int code) {
        return MAP.get(code);
    }

}

总结:我这其实也算重复造轮子了,其实重复造轮子也挺好,前提是你看过其他轮子。最早我是闭门造车;后来发现我的一些想法和某些成型产品不谋而合(有想法的人还是蛮多的,自己也不是那么NB),人家的成型产品比我想的要全面要好(一个团队的力量始终还是比个人大一些的);从那开始我对重复造轮子失去了兴趣,反而对组装开始感兴趣(产品选型及组合运用);多年后又觉得重复造轮子也挺好,因为那轮子始终是别人的,重复造了一遍才能是自己的,有了自己的轮子才能造自己的车,这样才能有坚实的基础,才够优雅~ 当然这都是个人看法,不喜欢请轻喷~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值