首页 > Java枚举 自增赋值

Java枚举 自增赋值

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
【热门文章】
【热门文章】