Java枚举类型的使用

    科技2022-08-11  106

    情景

    在之前开发C++的时候使用过枚举类型,但也不是很熟练,直到现在写Java对于枚举类型掌握可谓是一塌糊涂,下决心学习这个类型,并能够熟练使用提高开发效率。之前的时候因为一直未使用这种enum枚举,,别人提到枚举的时候下意识地就会记起来自己还不会使用心里总会涌上一股惊慌,很怕别人提问我相关地概念以及使用,是真的插不上话。现在到了项目开发的优化阶段使用枚举能够简化开发的代码样式,项目中真的要使用了,现在认真的学习一下,而且好像真的不是很难。


    是什么

    [枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。本质就是,一个类里定义几个静态变量,每个变量都是这个类的实例。

    为什么

    为什么使用枚举类型,因为在项目中使用枚举类型的的时候会显得比较易读,且容易理解代码的功能和逻辑 对应配置信息一般用于配置信息,比如颜色 RED=1、ORANGE=2、YELLOW=3、GREEN=4,这就可以创建一个枚举类型,你可以把数字存储到数据库,在代码里面显示文字描述,这样使得代码易懂。(PS你非得在数据库中存储汉字也行)。 用于错误信息返回:成功=1、失败=-1、部分成功=0,这样你在代码里面写的时候,别人一看就一目了然,你写0、1、-1谁知道什么意思。当然了最终的值还是数字,可是再别人读你程序的时候,看到的是有具体意思的单词。说了这么多,可能还是有点迷惑,下面就是项目中的栗子。

    怎么用

    要求

    编程规约: 阿里巴巴出品的编程规约 [参考]枚举类名建议带上Enum后缀, 枚举成员名称需要全大写, 单词间用下划线隔开。 说明: 枚举其实就是特殊的常量类, 且构造方法被默认和强制是私有。 正例: DealStatusEnum, 成员名称: SUCCESS/UNKOWN_REASON

    常见用法

    用法一:常量

    在JDK1.5 之前,我们定义常量都是: public static final… 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 这里给出一个不带自定义成员变量和方法的比较简单的一个实例,当然枚举类可以有自己的成员变量和方法。

    Java代码

    public enum Color { RED, GREEN, BLANK, YELLOW }

    用法二:switch

    JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

    Java代码

    enum Signal { GREEN, YELLOW, RED } public class TrafficLight { Signal color = Signal.RED; public void change() { switch (color) { case RED: color = Signal.GREEN; break; case YELLOW: color = Signal.RED; break; case GREEN: color = Signal.YELLOW; break; } } }

    但是这仍然不涉及到自定义的成员变量,现在例如我们在很多场景下都要通过Signal枚举实例对象获取相对应的中文信息,那我们创建Signal这个枚举类时,可不可以让Signal中的每一个实例对象都有一个变量means来记录中文信息,并且包含有getMeans()和setMeans()方法呢。答案是肯定的,而且这种做法在企业开发中很常见,在用法三当中

    用法三:向枚举中添加新方法

    如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。

    而且 Java 要求必须先定义 enum 实例。

    Java代码

    public enum Color { //这里之所以每一个实例对象都能有两个属性是因为定义了两个成员变量String name以及int index,取值或者设置的时候只要使用对应的get/set方法 RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } // 普通方法 public static String getName(int index) { for (Color c : Color.values()) { if (c.getIndex() == index) { return c.name; } } return null; } // get set 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } }

    用法四:覆盖枚举的方法

    下面给出一个toString()方法覆盖的例子。 Java代码

    public enum Color { RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } //覆盖方法 @Override public String toString() { return this.index+"_"+this.name; } }
    Processed: 0.015, SQL: 8