Java中枚举的使用

  Java中有不少时候都用到了枚举,可是以前都没有去好好理解这个类,因此准备写一下关于枚举类的用法以及使用场景。java

  首先,介绍一下枚举的基本知识吧,enum没法继承其余类,由于它已经继承了java.lang.Enum。能够实现其余接口。而后使用enum须要构造方法。而enum里面的构造方法默认是private,所以,你没法再外部new一个enum类。安全

public enum TestEnum {

    NOMARL(1,"成功"),
    FAIL(2,"失败");

    private int code;
    private String message;

    TestEnum(int code,String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return this.code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return this.message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
public static void main(String[] args) throws InterruptedException, ParseException {
        System.out.println(TestEnum.NOMARL.getMessage());
    }

  上面就是枚举的使用,若是你在TestEnum的构造方法中打个断点,调试你会发现,当使用TestEnum.NOMARL会调用构造方法,将code设置为1,message设置为“成功”,而后调用getMessage()就会输出“成功”了。数据结构

  枚举的使用算是比较简单了。下面分析一下使用场景以及使用枚举的好处。性能

  当咱们须要一些有穷对象的集合的时候,咱们可使用枚举。好比一般JavaWeb接口返回数据的code,好比参数错误,操做成功,操做失败等等。若是直接在代码里面写1,2,3这种去标识的话,会让代码看起来很难懂。这个时候咱们可使用枚举。this

  不过这种状况咱们彻底能够新建一个类,再里面写常量用来定义各类code,一样能够在外部使用。那么到底这两种方式谁更好呢?在网上查了几篇文章,基本说的是如下三点好处。调试

  1. 可读性高,更容易理解code

这点我并不认同,由于枚举或者常量都须要名字来标识,好比上面的NOMARL,对象

public class ResponseCode {
public static final int NOMARL = 1;
}

使用这种写法也能够达到一样的效果。外部调用一样只须要ResponseCode.NOMARL就行了。blog

  2. 类型安全继承

这个的确是其中一种好处,好比setCode()方法。咱们固然可使用常量。可是一样对于不知道的人来讲,他彻底可使用setCode(-1)这种写法,而且不会报错。可是它可能并不合理。若是咱们使用枚举的话,就必须去枚举类里面添加上你想要的code,而后才能调用setCode()方法。

  3. 耦合性高,扩展性好

这点我也不是很认同,由于用常量和枚举,若是须要改动,咱们同样直用修改枚举或者常量里面的内容就行了,外部代码的引用也会随之更改。

  另外再说一点,当咱们的常量的类型是Map.Set这种数据结构的时候,咱们应该考虑使用EnumMap或者EnumSet,由于他们的性能更高。

相关文章
相关标签/搜索