在java中以枚举方式将整数值存储为常量

2022-08-31 08:45:29

我目前正在按以下方式创建整数常量。

public class Constants {
    public static int SIGN_CREATE=0;
    public static int SIGN_CREATE=1;
    public static int HOME_SCREEN=2;
    public static int REGISTER_SCREEN=3;
}

当我尝试以枚举方式执行此操作时

public enum PAGE{SIGN_CREATE,SIGN_CREATE,HOME_SCREEN,REGISTER_SCREEN}

当我使用时,它应该返回1;PAGE.SIGN_CREATE


答案 1

好吧,你不能完全这样做。 永远不会返回 1;它会返回。这就是枚举类型的要点。PAGE.SIGN_CREATEPAGE.SIGN_CREATE

但是,如果您愿意添加一些击键,则可以向枚举中添加字段,如下所示:


    public enum PAGE{
        SIGN_CREATE(0),
        SIGN_CREATE_BONUS(1),
        HOME_SCREEN(2),
        REGISTER_SCREEN(3);

        private final int value;

        PAGE(final int newValue) {
            value = newValue;
        }

        public int getValue() { return value; }
    }

然后你打电话得到0。PAGE.SIGN_CREATE.getValue()


答案 2

想要一个与每个枚举值关联的整数常量的最常见有效原因是与仍然需要这些整数的其他组件进行互操作(例如,您无法更改的序列化协议,或者枚举表示表中的列等)。

在几乎所有情况下,我建议使用 a 代替。它可以更完全地分离组件,如果这是问题所在,或者如果枚举表示列索引或类似的东西,您可以在以后轻松进行更改(如果需要,甚至可以在运行时进行更改)。EnumMap

 private final EnumMap<Page, Integer> pageIndexes = new EnumMap<Page, Integer>(Page.class);
 pageIndexes.put(Page.SIGN_CREATE, 1);
 //etc., ...

 int createIndex = pageIndexes.get(Page.SIGN_CREATE);

它通常也非常高效。

将这样的数据添加到枚举实例本身可能非常强大,但通常会被滥用。

编辑:刚刚意识到Bloch在有效的Java / 2nd版本中,在项目33:使用EnumMap而不是序号索引中解决了这个问题。


推荐