美文网首页
为什么使用枚举?

为什么使用枚举?

作者: 常扬 | 来源:发表于2019-03-13 16:44 被阅读0次

在项目重构时,对数据状态、字典等字段的描述(type、status等)我会在系统中使用枚举来表示,为什么我们要使用枚举呢?

枚举例子

public enum CompanyEnum {

    SUBSISTING("subsisting","存续"),

    EMPLOYED("employed","在业"),

    REVOKE("revoke","吊销"),

    ANNUL("annul","注销"),

    MOVING("moving","迁入"),

    EMIGRATION("emigration","迁出"),

    SHUTOUT("shutout","停业"),

    LIQUIDATE("liquidate","清算");

    private final String key;

    private final String value;

    private CompanyEnum (String key,String value){
        this.key = key;
        this.value = value;
    }

    /**
     * 根据key获取枚举
     * @param key
     * @return
     */
    public static CompanyEnum getEnumByKey(String key){
        if(null == key){
            return null;
        }
        for(CompanyEnum temp:CompanyEnum.values()){
            if(temp.getKey().equals(key)){
                return temp;
            }
        }
        return null;
    }

    public String getKey() {
        return key;
    }

    public String getValue() {
        return value;
    }
    
}

枚举优点

增强代码可读性
....
entity.setCompanyStatus(1);
....

上述代码向实体插入了一个状态“1”,由int类型表示,在重构项目时,如果没有注释我们很难知道这是什么?使用枚举:

....
// 设置公司状态
entity.setCompanyStatus(CompanyEnum.getEnumByKey("employed"))
....

当实际使用时,我们可以进入到CompanyEnum中查看状态对应的中文描述,以此来提高代码可阅读性。

传递参数错误

向上述状态值为int,如果传递是一个负数,例如:

....
entity.setCompanyStatus(-1);
....

然而,我们并没有定义"-1"这个参数状态,在程序编译时可以通过,可实际是存在错误的,我们使用枚举,可以在定义枚举类时规避这样的问题。

去除equals两者判断

由于常量值地址唯一,使用枚举可以直接通过“==”进行两个值之间的对比,性能会有所提高。

....
// 这样更耗费性能
if("status".equals(variable)) {
    ...
}
....

// 使用枚举,提高性能
if(CompanyEnum.getEnumByKey("employed") == variable) {
    ....
}
编译优势(与常量类相比)

常量类编译时,常量被直接编译进二进制代码中,常量值在升级中变化后,需要重新编译引用常量的类,因为二进制代码中存放的是旧值。枚举类编译时,没有把常量值编译到代码中,即使常量值发生改变,也不会影响引用常量的类。

修改优势(与常量类相比)

枚举类编译后默认final class,不允许继承可防止被子类修改。常量类可被继承修改、增加字段等,易导致父类不兼容。

数据库兼容

枚举型可直接与数据库交互。

Switch语句优势

使用int、String类型switch时,当出现参数不确定的情况,偶尔会出现越界的现象,这样我们就需要做容错操作(if条件筛选等),使用枚举,编译期间限定类型,不允许发生越界。

相关文章

  • 枚举

    枚举 Why:为什么需要枚举 What:枚举是什么; How:枚举怎么实现 When:枚举什么时候使用 Where...

  • 如何优雅地在JS中使用枚举定义

    如何优雅地在JS中使用枚举 为什么使用枚举 去魔法数字 枚举语义化 定义一体化:枚举值和枚举描述写在了一起,不分散...

  • 枚举 学习笔记

    android 中 我们通常推荐使用 @IntDef 等 代替使用 枚举,很多同学有疑问,为什么抛弃 枚举。我们现...

  • Android 尽量避免使用Enum

    Android之使用枚举利弊及替代方案 知识点: 概述 为什么要使用枚举? 使用 Enum 的缺点 解决方案 总结...

  • 为什么使用枚举?

    在项目重构时,对数据状态、字典等字段的描述(type、status等)我会在系统中使用枚举来表示,为什么我们要使用...

  • java 枚举类 getClass和getDeclaringCl

    在使用枚举类的时候,建议用getDeclaringClass返回枚举类。但是为什么不用getClass呢? 有人说...

  • 枚举类

    注:当需要定义一组常量时,强烈建议使用枚举类 一.为什么要使用枚举类答:https://blog.csdn.net...

  • java枚举笔记

    定义枚举 枚举使用关键字enum定义,枚举值一般使用大写字母,值之间用逗号隔开。例如定义一个颜色的枚举。 枚举使用...

  • Swift 基础笔记 - 枚举

    枚举 OC定义和使用枚举 Swift定义枚举类型 Swift判断枚举类型 枚举成员类型

  • mybaits if 标签中使用枚举判断

    mybaits if 标签中使用枚举判断 枚举定义 if标签中使用

网友评论

      本文标题:为什么使用枚举?

      本文链接:https://www.haomeiwen.com/subject/lletmqtx.html