华人澳洲中文论坛

热图推荐

    java中的enum第一期:enum存在的意义

    [复制链接]

    2022-10-26 21:40:54 82 0

    大家好,我是贠学文,点击右上方“关注”,天天为您分享java顺序员需求掌握的常识点干货。


    早晨四点的北京
    记得有人已经和我说过,他在使用java的过程当中,历来没有使用过enum。固然了,你不使用enum,同样能够编码,然而enum存在的意义,就是让咱们的代码更为的便于开发和保护。
    甚么是enum
    enum能够了解为将一组拥有相反性质的常量封装成一个对象数组,封装成对象数组后,数组中的每个元素,都拥有了对象的性质,使得咱们在使历时,能够充沛的利用面向对象的设计思想,对代码做解耦合,使代码的开发都保护,都变得更为简略。
    举例来讲,一个用户对象,有上面几种形态:正常、锁定、明码过时、登记。那咱们用常量去定义时,代码如下图一所示:


    图一
    用枚举当前,咱们能够将这一组常量,封装成一个聚拢,代码如下图二所示:


    图二
    这样封装当前,枚举中的每个元素,就都拥有了对象的性质。那这样封装了当前,详细有甚么益处呢?上面分别来讲明。
    enum能给咱们带来哪些益处办法入参的验证
    如果有某办法,需求用户形态做入参,假如用常量的话,需求判别入参的参数值是不是在常量的规模内,如下图三所示:


    图三
    能够看出,这段代码中的对参数的验证,有些繁杂,并且这仍是变量值未几的状况,只要四个,假如常量值多了,将会更为繁杂。那假如用枚举的形式呢,如下图四所示:


    图四
    能够看出,用枚举做为入参的话,在办法中只判别枚举对象是不是为空便可,十分简略,并且也不会枚举类中的值变多而使判别逻辑变得繁杂。由于这里用了枚举类型做了强限度,只有传来的不是空,就参数一定是合法的,不然连编译都过不去。
    反向查找
    使用常量定义时,咱们能够做正向查找,便可以按照形态找到对应的值,好比能够找到形态为正常的值为1,形态为锁定的值为2。然而有些时分,咱们需求做反向查找,即经过形态的值,去找到该值对应的形态是甚么,这个经过常量是无奈做到的,然而经过枚举就能做到。如下图五所示:


    图五
    经过上图中的getByID办法,就能经过值反向查找形态。
    然而这样做的话,需求在每个枚举类中都重写这个办法,对比费事,所以咱们能够就这个办法提取到工具类中复用。首先,咱们先定义一个接口,如下图六所示:


    图六
    而后再让咱们定义的枚举类完成这个接口,如下图1.1.8-7所示:


    图七
    上面再把反向查找的代码封装到工具类中,如下图八所示:


    图八
    利用形态模式增加代码中的少量判别
    如果有某办法,需求判别用户的形态,而后不同的形态,做出不同的行动,咱们先看下使用常量会怎么做,如图九所示:


    图九
    可见代码中会存在少量的判别,会前期的代码保护带来难题。可能有人会说,能够使用工厂模式,这样在使用的时分就没有这少量的判别了,然而这样的话,工厂类中仍是会有少量的判别,成果是同样的,判别并无增加,只是挪了一下中央罢了,前期的保护仍是很费事。
    那假如用枚举类就会简略得多,首先咱们在枚举类中定义一个笼统办法,而后让枚举中的每一个个元素都重写这个办法,如下图十所示:


    图十
    而后在使历时,只是简略调用这个办法便可,如下图11所示:


    图11
    这个就增加了少量的if判别,代码变得十分简略,易于保护。
    然而在枚举中定义笼统办法,假如定义很多了,或者某个笼统办法的完成对比繁杂,就会使这个枚举类变得很臃肿。这时候咱们笼统出来一个接口,而后把笼统办法都放到这个接口中,如下图12所示:


    图12
    而后在枚举类中,只需求前往每个元素对应的完成类的对象便可,如下图十三所示:


    图十三
    而后在使历时,如下图十四所示:


    图十四
    这样既让枚举类变得再也不臃肿,又让在使历时变得简略,便利了前期的代码保护。
    以上这些,就是我总结的enum可以给咱们带来的益处,下一期,咱们来说一下enum的底层完成原理。
    工厂模式如何打消少量的if else 第二期
    工厂模式如何打消少量的if else 第一期
    java中if与switch的那些事
    Elasticsearch的中心真的是倒排索引吗?
    史上将String常量池讲得最透辟的文章
    作者引见:
    贠学文,拥有多有教训的java开发工程师,业余时间利用头条分享技术常识点与本人对技术的感悟,帮忙对本人将来感到迷茫的顺序员,在技术上失掉晋升。结识一些情投意合的敌人,互相增进,独特提高。

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    返回列表 本版积分规则

    :
    注册会员
    :
    论坛短信
    :
    未填写
    :
    未填写
    :
    未填写

    主题23

    帖子27

    积分129

    图文推荐