在映射表中使用enum枚举

在ODN项目重构中,面临多厂家指令适配难题。通过分析业务流程,提出将命令结果存储在公共映射表,使用enum枚举类型替代json配置,简化代码引用。文章介绍了enum的基本使用、常用方法、属性调用、添加属性和方法以及构造函数的应用,以解决不同厂家指令的参数差异问题。

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

最近,公司安排我去参与重构一个ODN项目,其中有一条要求是把现有的仅支持单一公司Box的代码提升为支持多厂家,经过讨论组合指令采用了策略,进行了抽取优化,但是对单一指令却无法抽取,因为各个厂家的数据体不同,相同指令要求的参数也不同,这给我们带来了很大的苦恼。我经过仔细分析业务流程,发现不论哪一个厂家的指令,最简单的情况是命令直接是固定的,最复杂的情况是,本次的命令需要上面好几个命令的结果,这既是多厂家适配的难处却也是解决的问题最恰当的切入点,我是这样考虑的:不管哪个厂家,指令之间即使有关联,如果我们把每次发送命令的结果储存到公共的区域中,而且相同的命令是会覆盖之前的命令结果,这样每个厂家拿着自己的key必定能正确找到发起命令所需的数据

关于这个映射表,我也想过使用json文件的形式进行配置,但是考虑到需要进行Gosn解析,不适合在代码中直接引用,故考虑使用enum枚举类型。
1. enum枚举简单使用
enum枚举的引入,就是为了方便处理如一年12月,一周7天等这类有固定范围的数据,如下就是一个简单的enum类:

public enum Layout{
    TOP,BUTTOM,LEFT,RIGHT
}

引入了enum的java的列举的编写方便了许多,只须定义一个enum型的对象.enum对象的值都会自动获得一个数字值,从0开始,依次递增。
2. enum的常用方法

  • values()
    用来遍历enum中的值,如果采用Layout.values()方法,就可以遍历出TOP,BUTTOM,LEFT,RIGHT
    这四个值
  • ordinal()
    这个方法是给TOP等这样的enum值调用的,用来获来该值的定义的位置即索引值

3.enum的属性调用:
enum属性在调用处,通常情况下使用的是Enum名.Enum值访问,但是有一个地方需要注意,当在switch中使用enum时,不需要使用Enum名.Enum值形式,只需要Enum值即可。

4.为Enums添加属性和方法:
enums也可以象一般的类一样添加方法和属性,你可以为它添加静态和非静态的属性或方法,这一切都象你在一般的类中做的那样。就是这么的简单.但是有一点是需要注意的,那就是enums的值列表必须紧跟在enum声明,不然编译时将会出错,类似下面的形式:

READ_PORTS_INFO(new char[]{0x1105, 0x11A5, 0x0000}),

5.Enums构造函数:
当使用上述形式强制为每个enum值设置值时,则必须创建这样的构造方法,来进行赋值,如下所示:

/**
 * 用于替换命令码的映射表,Value采用行标在前,自定义命令在后(厂商依次为:行标,太平,华脉...)
 */
public enum MappingTable {
    /**
     * 特殊命令,box随时有可能直接发给客户端
     */
    ALERT(new char[]{0x0000, 0x5A11, 0x0000});

    private final char[] value;

    char[] getValue() {
        return value;
    }

    MappingTable(char[] value) {
        this.value = value;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值