枚举简介
枚举是java1.5引入的一个新特性,它继承于java.lang.Enum类。我们使用枚举来替换常量。例如下面是一个B站视频状态的枚举类,以这种方式定义的常量使代码更具可读性,允许进行编译时检查,预先记录可接受值的列表,并避免由于传入无效值而引起的意外行为。
1 2 3 4 5 6 7 8
| package com.example.item.constant;
/** * 创建在 2020/5/30 21:18 */ public enum VideoPublishStatus { DRAFT,AUDIT,PUBLISH }
|
在这里我定义了三个视频状态,分别是草稿(draft),审核(audit),发布(publish)。如果我们不用枚举会怎么样呢?下面是一个处理视频发布的方法,它不使用枚举做为方法参数。
1 2 3
| public void handlerVideoStatus(int status){ //假装是代码 }
|
这个方法如方法名一样就是处理一下视频的状态,这里参数的理想状态是VideoPublishStatus的任意一种,但是由于没有类型参数限制,这里传啥都行。
如果使用枚举来传参就会有更明显的意图和安全性了。
枚举基本用法
values()返回所有枚举常量的数组集合
1 2 3 4 5 6 7 8
| for (VideoPublishStatus status:VideoPublishStatus.values()){ System.out.println(status); } /* 输出 DRAFT AUDIT PUBLISH */
|
ordinal()返回枚举常量定义序数从0开始
1 2 3 4 5 6 7 8
| for (VideoPublishStatus status:VideoPublishStatus.values()){ System.out.println(status.ordinal()); } /* 输出 0 1 2 */
|
valueOf()返回指定名称的枚举常量
1 2 3
| VideoPublishStatus.valueOf("DRAFT"); VideoPublishStatus.valueOf("AUDIT"); VideoPublishStatus.valueOf("PUBLISH");
|
枚举常用使用场景
常量定义
switch
单例模式
策略模式