常量or枚举的取舍

简介: 常量or枚举的取舍

经营企业,是许多环节的共同运作,差一个念头,就决定整个成败。——松下幸之助

今天有小伙伴问我枚举和常量的区别

首先我们看常量,从Hutool下有个HttpStatus常量

cn.hutool.http.HttpStatus

我们可以看到这里的常量,就只是单一的值

我们使用的时候可以如下

public static void main(String[] args) {
    System.out.println(HttpStatus.HTTP_OK);
}

得到结果

然后我们再换到枚举

spring下面有个同名枚举

org.springframework.http.HttpStatus

我们这里像刚才那样使用

public static void main(String[] args) {
    System.out.println(cn.hutool.http.HttpStatus.HTTP_OK);
    System.out.println(org.springframework.http.HttpStatus.OK);
}

可以看到除了之前的状态码200还拿到了一个reasonPhrase值为OK

说明

常量只是单一的不可修改的值

枚举则是包含了很多常量的集合

枚举中一个常量可以包含很多信息

例如这里org.springframework.http.HttpStatus.OK包含的至少有

1.枚举的名字,可以使用java.lang.Enum#name获取到

System.out.println(org.springframework.http.HttpStatus.OK.name());

打印出来则为OK

2.枚举常量定义的下标,可以使用java.lang.Enum#ordinal获取到

System.out.println(org.springframework.http.HttpStatus.OK.ordinal());

打印出来则为4

3.枚举的构造方法里定义的值,例如这里org.springframework.http.HttpStatus#HttpStatus中有两个值

我们如果定义了getter或者取出值的方法

就可以取出对应的值

System.out.println(org.springframework.http.HttpStatus.OK.value());
System.out.println(org.springframework.http.HttpStatus.OK.getReasonPhrase());

4.你甚至可以通过其中一个枚举常量获取其他全部的枚举常量,用的是Class下的getEnumConstants

org.springframework.http.HttpStatus[] constants = org.springframework.http.HttpStatus.OK.getClass().getEnumConstants();
Arrays.stream(constants).forEach(System.out::println);

而常量,在不使用反射的情况下,只能获取一个值,例如这里的200。。。

在实际开发中,针对不同的业务需求使用常量或者枚举

例如只需要使用一个值,例如这里的200

你就可以定义一个常量使用

但如果你需要做别的操作

比如判断是否为200,如果不是200,你返回一个状态不是ok,这个ok是枚举内的reasonPhrase

int code = 201;
HttpStatus ok = HttpStatus.OK;
if (code != ok.value()) {
    System.out.println("Http status is not " + ok.getReasonPhrase() + "!");
}

这里ok参数我们随时可以换成别的,例如

int code = 201;
HttpStatus ok = HttpStatus.BAD_REQUEST;
if (code != ok.value()) {
    System.out.println("Http status is not " + ok.getReasonPhrase() + "!");
}

现在,你总该对常量和枚举的取舍有个认识了吧

相关文章
|
6月前
|
Java Spring
使用枚举定义常量更好点儿
使用枚举定义常量更好点儿
|
6月前
|
C语言
|
6月前
|
安全 算法 编译器
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
73 2
|
6月前
|
存储 安全 编译器
C语言中的枚举类型与整数常量:差异与处理
C语言中的枚举类型与整数常量:差异与处理
112 2
|
6月前
|
算法
枚举算法的介绍
枚举算法的介绍
56 0
|
6月前
|
存储 编译器 C语言
C 语言:类型转换与常量的细致理解
有时,您必须将一种数据类型的值转换为另一种类型。这称为类型转换
147 0
|
存储 C++
【C++11保姆级教程】强类型枚举(强类型枚举)和constexpr
【C++11保姆级教程】强类型枚举(强类型枚举)和constexpr
187 0
|
存储 编译器 Linux
关于枚举常量手误带来的错误
关于枚举常量手误带来的错误
105 0
|
编译器 C语言
C语言基础知识:变量 (局部和全局)与常量(枚举常量.....)
C语言基础知识:变量 (局部和全局)与常量(枚举常量.....)
78 0