java 枚举

  枚举,就是一个常数,在C/C++/C#里存的值是int型。可以在编码时限制输入符号。java的枚举,编译器实质上编译为类,并且是继承Enum抽象类,这意味着有类相同的功能,可以实现接口(但不能继承任何类,因为默认编译已经为它指派继承于Enum抽象类)。下面是枚举的几种形式:

  1.普通形式,用于一般场景

  类:  

enum CmdTypes
{
ADD, UPDATED
}

  调用方:  

for (CmdTypes item : CmdTypes.values())
{
System.out.println(String.format("%d,%s", item.ordinal(), item.name()));
}

  输出结果:

0,ADD
1,UPDATED

  分析:ordinal是输出枚举元素所在的索引值。从0开始,name是枚举元素狂吹。values返回枚举元素集合。

  

  2.附加一个元素值:

  类:

  

enum CmdTypes2
{
ADD(1), UPDATED(2);

private final int value;

CmdTypes2(int value)
{
this.value = value;
}

public int getValue()
{
return value;
}
}  

  调用方:  

for (CmdTypes2 item : CmdTypes2.values())
{
System.out.println(String.format("%d,%s", item.getValue(), item.name()));
}

  输出结果:

1,ADD
2,UPDATED

  分析:可以使每个元素附加一个额外的值,这个值就是value,定义元素有()的,必须以value和构造方法配套,value也可以为其他类型。

  3:附加多个元素值:

  类:

enum CmdTypes3
{
ADD {
@Override
public int value()
{
return 1;
}

@Override
public String text()
{
return "添加";
}
}, UPDATE {
@Override
public int value()
{
return 2;
}

@Override
public String text()
{
return "修改";
}
};

public abstract int value();

public abstract String text();
}

  调用方:

for (CmdTypes3 item : CmdTypes3.values())
{
System.out.println(String.format("%d,%s,%s", item.value(), item.text(), item.name()));
}

  输出结果:

1,添加,ADD
2,修改,UPDATE

  分析:附加多个值,只需要在枚举类里添加抽象方法,然后再在元素里重写此方法;其实也可以写为普通方法,那就是元素都共用一个方法。

 

  此外,枚举还可以实现接口,只需要按照类实现一样就可以了,如下:

  Interface Run {  }

  enum CmdTypes implements Run { }

 

  由此可见,java枚举要比C#强大很多,因为编译器最终会将枚举编译为类,所以类能实现的枚举基本能实现。

 

posted @ 2016-04-22 10:21  司马逍遥  阅读(172)  评论(0)    收藏  举报