Java枚举 自增赋值

发布于 2022-09-01 18:31:40 字数 557 浏览 34 评论 0

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

大家有没有什么好的替代办法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

海螺姑娘 2022-09-08 18:31:40

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
谁把谁当真 2022-09-08 18:31:40

Java没这么智能, 一般就是手动写写,灵活些。

扮仙女 2022-09-08 18:31:40

我也写了一篇文章,跟排名第一的同学类似:Java实现自增枚举

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文