Java 枚举实战

摘要:本文主要讨论生产环境中枚举类的使用。首先会经过对枚举类概念进行简单的介绍,引入咱们讨论的主题;而后就直接进入实战部分,本文只会介绍在实战中用的比较多,也比较经常使用的状况,因此但愿老铁能够用心体会并实践,最终化为己有;最后会大体在对枚举的 API 作了一个简单的介绍。其他没有介绍的内容,基本上在咱们的生产环境中极少用到,若是有兴趣的能够本身在深刻研究。前端

枚举

概念:枚举类型是 Java 5 中新增特性的一部分,它是一种特殊的数据类型,它的特色就是使咱们的代码更加简洁,安全,从某种程度来讲,使咱们能够站在全局的角度更加清晰的理解业务逻辑(好比说一个订单的状态被咱们定义成了枚举类以后,咱们不用看业务逻辑代码,只须要从这个枚举类中均可以了解到咱们这个订单的全部状态,给咱们一种全局观的印象在脑海中,更利于后期代码的梳理。)java

定义:首先使用 enum 来定义一个枚举类;而后每一个枚举值(即声明的枚举)是使用逗号隔开,若是枚举值后面还有操做代码,那么在最后一个枚举值后面加上分号结尾;最后必定要记住,枚举类中声明的每个值都是一个实例,也就是说有 n 个枚举值,构造函数就被调用 n 次来建立出 n 个枚举实例。这里举一个小例子看看:spring

enum SeasonType {
    SPRING, SUMMER, AUTUMN, WINTER;
    SeasonType() {
        System.out.println("看看此构造函数被调用了几回");
    }
}
public class Season {
    public static void main(String[] args) {
        System.out.println(SeasonType.SPRING);
    }
}

控制台输出:安全

看看此构造函数被调用了几回
看看此构造函数被调用了几回
看看此构造函数被调用了几回
看看此构造函数被调用了几回
SPRING

总结: 从这里能够看出来,枚举类中声明的每一枚举值其实都调用了构造函数并建立了实例,简单理解就是: 每个枚举值都是一个实例对象。函数

实战一无参

(1)定义一个无参枚举类this

enum SeasonType {
    SPRING, SUMMER, AUTUMN, WINTER
}

(2)实战中的使用code

// 根据实际状况选择下面的用法便可
SeasonType springType = SeasonType.SPRING;    // 输出 SPRING 
String springString = SeasonType.SPRING.toString();    // 输出 SPRING

实战二有一参

(1)定义只有一个参数的枚举类对象

enum SeasonType {
    // 经过构造函数传递参数并建立实例
    SPRING("spring"),
    SUMMER("summer"),
    AUTUMN("autumn"),
    WINTER("winter");

    // 定义实例对应的参数
    private String msg;

    // 必写:经过此构造器给枚举值建立实例
    SeasonType(String msg) {
        this.msg = msg;
    }

    // 经过此方法能够获取到对应实例的参数值
    public String getMsg() {
        return msg;
    }
}

(2)实战中的使用继承

// 当咱们为某个实例类赋值的时候可以使用以下方式
String msg = SeasonType.SPRING.getMsg();    // 输出 spring

实战三有两参

(1)定义有两个参数的枚举类element

public enum Season {
    // 经过构造函数传递参数并建立实例
    SPRING(1, "spring"),
    SUMMER(2, "summer"),
    AUTUMN(3, "autumn"),
    WINTER(4, "winter");

    // 定义实例对应的参数
    private Integer key;
    private String msg;

    // 必写:经过此构造器给枚举值建立实例
    Season(Integer key, String msg) {
        this.key = key;
        this.msg = msg;
    }

    // 不少状况,咱们可能从前端拿到的值是枚举类的 key ,而后就能够经过如下静态方法获取到对应枚举值
    public static Season valueofKey(Integer key) {
        for (Season season : Season.values()) {
            if (season.key.equals(key)) {
                return season;
            }
        }
        throw new IllegalArgumentException("No element matches " + key);
    }

    // 经过此方法能够获取到对应实例的 key 值
    public Integer getKey() {
        return key;
    }

    // 经过此方法能够获取到对应实例的 msg 值
    public String getMsg() {
        return msg;
    }
}

(2)实战中的使用

// 输出 key 为 1 的枚举值实例
Season season = Season.valueofKey(1);
// 输出 SPRING 实例对应的 key
Integer key = Season.SPRING.getKey();
// 输出 SPRING 实例对应的 msg
String msg = Season.SPRING.getMsg();

枚举类总结

其实枚举类懂了其概念后,枚举就变得至关简单了,随手就能够写一个枚举类出来。因此如上几个实战小例子必定要先搞清楚概念,而后在练习几遍就 ok 了。重要的概念,我在这里在赘述一遍,帮助老铁们快速掌握这块知识,首先记住,枚举类中的枚举值能够没有参数,也能够有多个参数,每个枚举值都是一个实例;而且还有一点很重要,就是若是枚举值有 n 个参数,那么构造函数中的参数值确定有 n 个,由于声明的每个枚举值都会调用构造函数去建立实例,因此参数必定是一一对应的;既然明白了这一点,那么咱们只须要在枚举类中把这 n 个参数定义为 n 个成员变量,而后提供对应的 get() 方法,以后经过实例就能够随意的获取实例中的任意参数值了。若是想让枚举类更加的好用,就能够模仿我在实战三中的写法那样,经过某一个参数值,好比 key 参数值,就能获取到其对应的枚举值,而后想要什么值,就 get 什么值就行了。

枚举 API

咱们使用 enum 定义的枚举类都是继承 java.lang.Enum 类的,那么就会继承其 API ,经常使用的 API 以下:

  • String name()

获取枚举名称

  • int ordinal()

获取枚举的位置(下标,初始值为 0 )

  • valueof(String msg)

经过 msg 获取其对应的枚举类型。(好比实战二中的枚举类或其它枚举类都行,只要使用得当均可以使用此方法)

  • values()

获取枚举类中的全部枚举值(好比在实战三中就使用到了)

欢迎老铁们一块儿讨论。。。

相关文章
相关标签/搜索