enum枚举笔记
文章目录
- 枚举基础知识
- name和name()是一个意思吗?
- 枚举的遍历和匹配
- 枚举的valueof如果找不到直接会抛异常
- 枚举如何获取一个对象
- 枚举类里写静态方法进行判断(小技巧)
枚举算是比较基础的知识了,但是实际理解的还不够,记录下。
每个枚举对象相当于一个构造器。
枚举基础知识
ordinal()# 自带方法,返回下标默认从0开始,这个方法是final方法
name()# 自带方法,返回对应字面值,这个方法也是final方法name()和toString()返回的结果是一样。
枚举属性定义需要用public方法,否则外面的类看不到。
enumQRZT{CONFIRM("1","确认",false),UNCONFIRM("2","未确认",true);privateStringcode;privateStringname;privatebooleandefaultFlag;privateQRZT(Stringcode,Stringname,booleandefaultFlag){this.code=code;this.name=name;this.defaultFlag=defaultFlag;}}name和name()是一个意思吗?
输入.自动带出方法时,带出name和name()方法,真是怪了,愣了一下下。
想了下才明白,name()是自带的方法,返回的是字面值。
name本身是没有的,属于自定义属性,需要构造了才有。
枚举的遍历和匹配
匹配代码:
CustomEnumcustomEnum=Arrays.stream(CustomEnum.values()).filter(t->t.name().equals(type.toUpperCase())).findFirst().orElse(null);log.info("customEnum={}",customEnum);枚举的valueof如果找不到直接会抛异常
如果找不到直接就会报错:
Stringtype="CCC";CustomEnumcustomEnum=CustomEnum.valueOf(type);这个值如果匹配不到直接就会抛异常,后面不用再加if(nullcustomEnum)==。
所以,如何判断枚举中是否包含某个值呢?
valueOf()其实就是可以的,或者遍历也可以,如果想要优雅,也可以封装个工具类。
枚举如何获取一个对象
由上面来看就比较简单了。
1、如果知道名字直接写出来,如 DemoEnum.AAA。
2、valueOf(名字)方法,如 DemoEnum.valueOf(BBB)。
3、values[下标],如 DemoEnum.values[1]。
枚举类里写静态方法进行判断(小技巧)
一般枚举类都是用于定义,实际也可以写个判断方法,例如入参是String,要进行多个判断,在枚举类里面写就好。
