在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。

例如星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。

在java中如何更好的使用这些“数据集”呢?因此枚举便派上了用场,以下代码详细介绍了枚举的用法。

package
com.ljq.test;


/**

* 枚举用法详解
*
*
@author
jiqinlin
*

*/


public

class
TestEnum {

/**

* 普通枚举
*
*
@author
jiqinlin
*

*/


public

enum
ColorEnum {
red, green, yellow, blue;
}


/**

* 枚举像普通的类一样可以添加属性和方法,可以为它添加静态和非静态的属性或方法
*
*
@author
jiqinlin
*

*/


public

enum
SeasonEnum {

//
注:枚举写在最前面,否则编译出错


spring, summer, autumn, winter;


private

final

static
String position
=

"
test
"
;


public

static
SeasonEnum getSeason() {

if
(
"
test
"
.equals(position))

return
spring;

else


return
winter;
}
}


/**

* 性别
*
* 实现带有构造器的枚举
*
*
@author
jiqinlin
*

*/


public

enum
Gender{

//
通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错

//
赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错


MAN(
"
MAN
"
), WOMEN(
"
WOMEN
"
);


private

final
String value;


//
构造器默认也只能是private, 从而保证构造函数只能在内部使用


Gender(String value) {

this
.value
=
value;
}


public
String getValue() {

return
value;
}
}


/**

* 订单状态
*
* 实现带有抽象方法的枚举
*
*
@author
jiqinlin
*

*/


public

enum
OrderState {

/**
已取消
*/

CANCEL {
public
String getName(){
return

"
已取消
"
;}},

/**
待审核
*/

WAITCONFIRM {
public
String getName(){
return

"
待审核
"
;}},

/**
等待付款
*/

WAITPAYMENT {
public
String getName(){
return

"
等待付款
"
;}},

/**
正在配货
*/

ADMEASUREPRODUCT {
public
String getName(){
return

"
正在配货
"
;}},

/**
等待发货
*/

WAITDELIVER {
public
String getName(){
return

"
等待发货
"
;}},

/**
已发货
*/

DELIVERED {
public
String getName(){
return

"
已发货
"
;}},

/**
已收货
*/

RECEIVED {
public
String getName(){
return

"
已收货
"
;}};


public

abstract
String getName();
}


public

static

void
main(String[] args) {

//
枚举是一种类型,用于定义变量,以限制变量的赋值;赋值时通过“枚举名.值”取得枚举中的值


ColorEnum colorEnum
=
ColorEnum.blue;

switch
(colorEnum) {

case
red:
System.out.println(
"
color is red
"
);

break
;

case
green:
System.out.println(
"
color is green
"
);

break
;

case
yellow:
System.out.println(
"
color is yellow
"
);

break
;

case
blue:
System.out.println(
"
color is blue
"
);

break
;
}


//
遍历枚举


System.out.println(
"
遍历ColorEnum枚举中的值
"
);

for
(ColorEnum color : ColorEnum.values()){
System.out.println(color);
}


//
获取枚举的个数


System.out.println(
"
ColorEnum枚举中的值有
"
+
ColorEnum.values().length
+
"

"
);


//
获取枚举的索引位置,默认从0开始


System.out.println(ColorEnum.red.ordinal());
//
0


System.out.println(ColorEnum.green.ordinal());
//
1


System.out.println(ColorEnum.yellow.ordinal());
//
2


System.out.println(ColorEnum.blue.ordinal());
//
3


//
枚举默认实现了java.lang.Comparable接口


System.out.println(ColorEnum.red.compareTo(ColorEnum.green));
//
-1


//
--------------------------


System.out.println(
"
===========
"
);
System.err.println(
"
季节为
"

+
SeasonEnum.getSeason());



//
--------------


System.out.println(
"
===========
"
);

for
(Gender gender : Gender.values()){
System.out.println(gender.value);
}


//
--------------


System.out.println(
"
===========
"
);

for
(OrderState order : OrderState.values()){
System.out.println(order.getName());
}
}

}