Java枚举 自增赋值
PHP中文网
PHP中文网 2017-04-17 15:05:35
[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;
    }
}

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

PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
迷茫

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
伊谢尔伦

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

PHPz

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号