Java 原生的Enum没有办法与C中的Enum一样随意指定成员的值,在一些C语言直接与Java 通信的场景中会比较麻烦,所以我对Java 原有的Enum进行扩展来达到随意指定成员值的目的:
public class Test {
public static void main(String args[]){
CMD[] name = CMD.values();
for (CMD cmd : name) {
System.out.println("i:" + cmd.value());
}
}
public static enum CMD{
e_CMD_MIN(900),
e_CMD_SET_PORT(e_CMD_MIN.value),
e_CMD_GET_PORT,
e_CMD_SET_POS,
e_CMD_MAX,
e_CMD_RET_MIN(1000),
e_CMD_URGENT_MSG(e_CMD_RET_MIN.value),
e_CMD_SET_POWER,
e_CMD_GET_POWER,
e_CMD_RET_MAX;
private final int value;
private static int count = 0;
private static void set(int value){
count = value;
}
private static int prv(){
return count;
}
private static int next(){
return count++;
}
//默认构造函数,value依次递增
CMD(){
this.value = next();
//this.value = count++;
};
//构造函数:直接指定value的值
CMD(int value){
//检查新指定的value是否合法,非法时抛出异常
if((value + 1) < prv()){
try {
throw new Exception(this.name()
+ ":Incorrect value,previous is " + prv()
+ ",current is " + value);
} catch (Exception e) {
e.printStackTrace();
}
}
this.value = value;
set(value + 1);
}
//获取每个成员的值
public final int value(){
return value;
}
}
}