为什么建议你使用枚举?(上)

简介: 为什么建议你使用枚举?

枚举是 JDK 1.5 新增的数据类型,使用枚举我们可以很好的描述一些特定的业务场景,比如一年中的春、夏、秋、冬,还有每周的周一到周天,还有各种颜色,以及可以用它来描述一些状态信息,比如错误码等。


枚举类型不止存在在 Java 语言中,在其它语言中也都能找到它的身影,例如 C# 和 Python 等,但我发现在实际的项目中使用枚举的人很少,所以本文就来聊一聊枚举的相关内容,好让朋友们对枚举有一个大概的印象,这样在编程时起码还能想到有“枚举”这样一个类型。


本文的结构目录如下:


image.png


枚举的 7 种使用方法


很多人不使用枚举的一个重要的原因是对枚举不够熟悉,那么我们就先从枚举的 7 种使用方法说起。


用法一:常量


在 JDK 1.5 之前,我们定义常量都是 public static final... ,但有了枚举,我们就可以把这些常量定义成一个枚举类了,实现代码如下:


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


用法二:switch


将枚举用在 switch 判断中,使得代码可读性更高了,实现代码如下:


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


用法三:枚举中增加方法


我们可以在枚举中增加一些方法,让枚举具备更多的特性,实现代码如下:


public class EnumTest {
    public static void main(String[] args) {
        ErrorCodeEnum errorCode = ErrorCodeEnum.SUCCESS;
        System.out.println("状态码:" + errorCode.code() + 
                           " 状态信息:" + errorCode.msg());
    }
}
enum ErrorCodeEnum {
    SUCCESS(1000, "success"),
    PARAM_ERROR(1001, "parameter error"),
    SYS_ERROR(1003, "system error"),
    NAMESPACE_NOT_FOUND(2001, "namespace not found"),
    NODE_NOT_EXIST(3002, "node not exist"),
    NODE_ALREADY_EXIST(3003, "node already exist"),
    UNKNOWN_ERROR(9999, "unknown error");
    private int code;
    private String msg;
    ErrorCodeEnum(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }
    public int code() {
        return code;
    }
    public String msg() {
        return msg;
    }
    public static ErrorCodeEnum getErrorCode(int code) {
        for (ErrorCodeEnum it : ErrorCodeEnum.values()) {
            if (it.code() == code) {
                return it;
            }
        }
        return UNKNOWN_ERROR;
    }
}


以上程序的执行结果为:


状态码:1000 状态信息:success


用法四:覆盖枚举方法


我们可以覆盖一些枚举中的方法用于实现自己的业务,比如我们可以覆盖 toString() 方法,实现代码如下:


public class EnumTest {
    public static void main(String[] args) {
        ColorEnum colorEnum = ColorEnum.RED;
        System.out.println(colorEnum.toString());
    }
}
enum ColorEnum {
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLOW("黄色", 4);
    //  成员变量
    private String name;
    private int index;
    //  构造方法
    private ColorEnum(String name, int index) {
        this.name = name;
        this.index = index;
    }
    //覆盖方法
    @Override
    public String toString() {
        return this.index + ":" + this.name;
    }
}


以上程序的执行结果为:


1:红色


相关文章
|
2月前
|
安全 Java 索引
枚举的使用
枚举的使用
|
3月前
|
Java C语言 Spring
枚举
【2月更文挑战第4天】枚举。
29 4
|
9月前
|
安全 索引
|
存储 JavaScript 前端开发
枚举(enumerables)
枚举(enumerables)
89 0
|
编解码 网络协议 5G
【C/C++】一文了解枚举使用
在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。通俗来讲,枚举是具有共同属性的一类整数常数的有限集合,例如星期一到星期天,就是一个成员个数为7的枚举类型,枚举成员也称为枚举项。
115 0
【C/C++】一文了解枚举使用
|
安全 Java 程序员
为什么建议你使用枚举?(下)
为什么建议你使用枚举?
204 0
为什么建议你使用枚举?(下)
|
存储 Java
为什么建议你使用枚举?(中)
为什么建议你使用枚举?
112 0
|
Java Spring 安全
Java基础巩固-枚举的使用
枚举:jdk1.5引入的新特性,允许用常量表示特定的数据片段,且全一类型安全的形式来表示。 常用的定义常量方式 public static final xxx .
1075 0