Java Enum

来源:互联网 发布:淘宝如何设置活动秒杀 编辑:程序博客网 时间:2024/05/16 09:52

本博客转自https://originals-tz.github.io/

什么是枚举类型

枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中。

而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义相似。不过相比较常量类型,枚举类型可以为申明的变量提供更大的取值范围。

简单的枚举类型定义

假如你希望创建一个颜色库,你可以这样定义枚举类型

enum Color {red, green, yellow, black};

然后你就可以使用它

Color T = Color.red;if (T == Color.red)    System.out.println("i am red");switch(T) {  case red:      System.out.println("i am red");      break}

定制枚举类型

在C/C++中,我们可以这样使用枚举变量

enum color {red,green};enum color a = 1;// a is green

在Java中定义枚举类型的值

enum color {  red(1),green(2);  private final int number;  color(int i) {    this.number = i;  }  public getValue() {    return this.number;  }}

然后使用 T.getValue() 便可获取绑定的值

重写枚举的方法

枚举类给我们提供的方法有,具体可以查看Enum.java

name, toString, valueOf  //获取名字equals //比较ordinal //获取位置

实现接口

所有的枚举都继承自java.lang.Enum类。

由于Java 不支持多继承,所以枚举对象不能再继承其他类,但是可以实现接口

Test

enum number {    zero(0),one(1),two(2);    int n;    number(int i) {        this.n = i;    }    public int getValue(){        return this.n;    }}interface People_State {    String getState();    State_Enum ChangeState();}enum  State_Enum implements People_State {    normal("正常"), stop("停止");    private final String state;    State_Enum(String s) {        this.state = s;    }    public String toString() {        return state;    }    @Override    public String getState() {        return state;    }    @Override    public State_Enum ChangeState() {        if (this == normal)            return stop;        else            return normal;    }}public class Test_Enum {    public static void main(String[] args) {        number z = number.zero;        State_Enum state = State_Enum.normal;        System.out.println(z.getValue());        System.out.println(z);        System.out.println(number.one);        switch (z) {            case zero:                System.out.println(0);                break;            case one:                System.out.println(1);                break;            case two:                System.out.println("2");                break;        }        //equals        if (z.equals(number.one)) {            System.out.println("equal!");        } else {            System.out.println("unequal");        }        //valueOf        System.out.println(number.valueOf("zero"));        //ordinal        System.out.println(z.ordinal()); //the index of values        System.out.println(state.toString());        state = state.ChangeState();        System.out.println(state.getState());    }}

Output

0zeroone0unequalzero0正常停止