1,概述
-
JDK1.5引入了新的类型——枚举。
-
枚举是一个特殊的class
-
这个class相当于final static修饰,不能被继承
-
它的构造方法强制被私有化,即枚举类不能实例化
-
所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类
-
每个枚举变量都是枚举类的实例
-
每个成员变量都是final static修饰
2,用法用例
2.1 先来看一个简单枚举类
public enum Color { RED, BLANK, YELLOW, GREEN, CYAN, BLUE }
从上面的定义形式来看,似乎 Java 中的枚举类型很简单,但实际上 Java 语言规范赋予枚举类型的功能非常的强大,它不仅是简单地将数值转换成对象,而是将枚举类型定义转变成一个完整功能的类定义。这种类型定义的扩展允许开发者给枚举类型增加任何方法和属性,也可以实现任意的接口。另外,Java 平台也为 Enum 类型提供了高质量的实现,比如默认实现 Comparable 和 Serializable 接口,让开发者一般情况下不用关心这些细节。
初学者在开发中一般定义常量都是: public static fianl...。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里。
2.2 实际项目运用
假如我项目开发中有一个订单模块,订单有多种状态,如待付款,待发货,待收货,待评价等。
我们在数据库建表时并不会直接存放这些文字说明或者英文字段,而是会用数字编码代替(好处:内存占用少,sql查询条件易于编写)
另外用枚举类把状态码和具体含义绑定,如0--待付款,1--待发货,2--待收货,3--待评价
代码实现:
import com.baomidou.mybatisplus.annotation.EnumValue;
import sog.framework.models.enums.SogBaseEnum;
public enum StatusEnum{
/**
* PAYMENT:待付款,SHIPMENTS:待发货,RECEIVING:待收货,EVALUATE:待评价
*/
PAYMENT("0", "待付款"),
SHIPMENTS("1", "待发货"),
RECEIVING("2", "待收货"),
EVALUATE("3", "待评价"),
;
// 存入到数据库中的值
@EnumValue
private String code;
private String name;
AssetStatusEnum(String code, String name) {
this.code = code;
this.name = name;
}
@Override
public String getCode() {
return this.code;
}
@Override
public String getName() {
return this.name;
}
// 输出到页面的值
@Override
public String toString() {
return this.getName();
}
}
代码分析:
-
首先枚举实例结束后要以分号(“;”)分割
- 之后可以定义一些属性和方法,每一个枚举实例就相当于一个当前类的对象实例
2.3 枚举的其他用法
单例模式
具体原理可仔细查看文章开头关于枚举类的概述