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;
}
}
}