我们在Java中常用枚举来标识数据库表中某个字段规定的一些常量:
public enum Color {
RED, GREEN, BLANK, YELLOW
} ;
// 或者
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 普通方法
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
使用switch
public enum TICKETSTATE{
/**
* 0:未开始
*/
NOTSTART(0),
/**
* 1;执行中
*/
START(1),
/**
* 2:已结束
*/
END(2),
/**
* 3:暂停'
*/
PAUSE(3);
private int state;
TICKETSTATE(int state) {
this.state = state;
}
public static TICKETSTATE fromTypeName(int state) {
for (TICKETSTATE ticketState : TICKETSTATE.values()) {
if (ticketState.getState() == state) {
return ticketState;
}
}
return null;
}
public int getState() {
return this.state;
}
当使用到switch判断就会优雅些:
// 查到state
TICKETSTATE state = TICKETSTATE.fromTypeName(sqlData.state);
switch (state) {
// 状态为未开始
case NOTSTART:
// 设置状态为执行中,并且添加下一个定时任务
couponsService.changeCouponState(dao, tmId, START.getState());
String endTime = couponsService.getCouponEndTime(dao, tmId);
couponTimer.addJob(this, tmId, START.getState(), endTime);
break;
// 执行中
case START:
// 设置状态为结束
couponsService.changeCouponState(dao, tmId, END.getState());
break;
default:
break;
}
参考《ThinkingInJava》第四版,当然还有几种方法,不过自己不常用。