java的枚举

108 阅读1分钟

java的枚举真的很有意思。原本在C#里简简单单的事情,在JAVA里面搞得那么复杂。

下面是一个枚举定义:

package com.monkey.zjfwpt.modules.hyjj.entity;

public enum ENormal {
    FZXZ (1),ZDXM(2),CLOUD(4);

    private final int value;
    private ENormal(int value) {
        this.value = value;
    }

    public ENormal valueOf(int value) {
        switch (value) {
            case 1:
                return ENormal.FZXZ;
            case 2:
                return ENormal.ZDXM;
            default:
                return null;
        }
    }
    public int value() {
        return this.value;
    }

}

这哪是什么枚举,就是一个类啊。而且还有点莫名其妙。本来也可以最简单的:

public enum ENormal {
    FZXZ,ZDXM,CLOUD;
}

之所以要像第一个例子那样写一大坨,就是为了类型转换。像本例,枚举ENormal实际上是一个整型,但在java中,不能这样写:

int en = (int)ENormal.FZXZ;

要这样:

int en = ENormal.FZXZ.value();

为了这个value(),就是我们写一大坨的原因。

当然啦,如果是采用最简单的方式

public enum ENormal {
    FZXZ,ZDXM,CLOUD;
}

也不是不行,但我们只能通过读枚举元素下标(序号)的方式来获得整型值:

int en = ENormal.ordinal();

从0开始吧好像。不过这样有个风险,就是万一中途插入一个新的枚举元素,岂不乱套了。