Java枚举类Enum

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 枚举的其他用法

单例模式

具体原理可仔细查看文章开头关于枚举类的概述

 

posted @ 2020-07-31 16:59  风子磊  阅读(308)  评论(0编辑  收藏  举报