经营企业,是许多环节的共同运作,差一个念头,就决定整个成败。——松下幸之助
今天有小伙伴问我枚举和常量的区别
首先我们看常量,从Hutool
下有个HttpStatus
常量
1 | cn.hutool.http.HttpStatus |
我们可以看到这里的常量,就只是单一的值
我们使用的时候可以如下
1 | public static void main(String[] args) { |
得到结果
然后我们再换到枚举
在spring
下面有个同名枚举
1 | org.springframework.http.HttpStatus |
我们这里像刚才那样使用
1 | public static void main(String[] args) { |
可以看到除了之前的状态码200
还拿到了一个reasonPhrase
值为OK
说明
常量只是单一的不可修改的值
枚举则是包含了很多常量的集合
枚举中一个常量可以包含很多信息
例如这里org.springframework.http.HttpStatus.OK
包含的至少有
1.枚举的名字,可以使用java.lang.Enum#name
获取到
1 | System.out.println(org.springframework.http.HttpStatus.OK.name()); |
打印出来则为OK
2.枚举常量定义的下标,可以使用java.lang.Enum#ordinal
获取到
1 | System.out.println(org.springframework.http.HttpStatus.OK.ordinal()); |
打印出来则为4
3.枚举的构造方法里定义的值,例如这里org.springframework.http.HttpStatus#HttpStatus
中有两个值
我们如果定义了getter
或者取出值的方法
就可以取出对应的值
1 | System.out.println(org.springframework.http.HttpStatus.OK.value()); |
4.你甚至可以通过其中一个枚举常量获取其他全部的枚举常量,用的是Class
下的getEnumConstants
1 | org.springframework.http.HttpStatus[] constants = org.springframework.http.HttpStatus.OK.getClass().getEnumConstants(); |
而常量,在不使用反射的情况下,只能获取一个值,例如这里的200
。。。
在实际开发中,针对不同的业务需求使用常量或者枚举
例如只需要使用一个值,例如这里的200
你就可以定义一个常量使用
但如果你需要做别的操作
比如判断是否为200
,如果不是200
,你返回一个状态不是ok
,这个ok
是枚举内的reasonPhrase
1 | int code = 201; |
这里ok
参数我们随时可以换成别的,例如
1 | int code = 201; |
现在,你总该对常量和枚举的取舍有个认识了吧