Java枚举类型如何实现类似C++的自增赋值?
在C++中可以这么写:
enum MSG_TYPE {
MSG_LOGIN = 500,
MSG_LOGOUT,
MSG_REGISTER,
MSG_SEARCH,
/* ... */
};
但是在Java中就必须写一大坨,必须依次给每个枚举常量赋值,例如下面代码
public enum MSG_TYPE{
MSG_LOGIN(500),
MSG_LOGOUT(501),
MSG_REGISTER(502),
MSG_SEARCH(503),
/* ... */
MSG_ADD(600);
private int egId;
private MSG_TYPE(int val){
this.egId = val
}
public getEgId(){
return this.egId;
}
}
大家有没有什么好的替代办法?
我也写了一篇文章,跟排名第一的同学类似:Java实现自增枚举
Java没这么智能, 一般就是手动写写,灵活些。
java中enum并没那么智能,是从0开始自增的。可以维护一个static变量实现任意自增:
import java.util.EnumSet;
public class EnumTest {
public static void main(String[] args) {
for (MSG_TYPE msg_type : EnumSet.allOf(MSG_TYPE.class))
{
System.out.println(msg_type.name() + " " +
msg_type.ordinal() + " " +
msg_type.getValue());
}
}
}
enum MSG_TYPE {
MSG_LOGIN(500),
MSG_LOGOUT,
MSG_REGISTER,
MSG_SEARCH,
MSG_ADD(600);
private int value;
private static int nextValue;
MSG_TYPE(){
this(Counter.nextValue);
}
MSG_TYPE(int value){
this.value = value;
Counter.nextValue = value + 1;
}
public int getValue()
{
return value;
}
private static class Counter
{
private static int nextValue = 0;
}
}
结果:
MSG_LOGIN 0 500
MSG_LOGOUT 1 501
MSG_REGISTER 2 502
MSG_SEARCH 3 503
MSG_ADD 4 600