Java:我可以使用常量字符串作为枚举键值吗?

标签 java enums

我有一个带有几个键的枚举类。 多个键应该具有相同的字符串值。 声纳对我大喊,让我用常量值替换相同的字符串值。

例如:

public enum MESSAGE_TYPES {

KEY1("Val1"),
KEY2("Val2"),
KEY3("Val3"),
KEY4("Val2"),
KEY5("Val4"),
KEY6("Val2"),
//etc.

}

所以,声纳希望我:

Define a constant instead of duplicating this literal...

对于“Val2”,因为它被定义了 3 次或更多次。 我怎样才能实现这一目标?

自动将值提取为常量,将其放在枚举键之后,但是枚举键的值当然无法识别它。 所以,我尝试将它放在枚举类的顶部

public enum MESSAGE_TYPES {

    private static final String VAL2 = "Val2";

    KEY1("Val1"),
    KEY2(VAL2),
...
}

所以我收到了“语法错误”错误。

请指教。

谢谢!

最佳答案

在声明枚举值之前,不能在枚举类中声明static 字段。
在枚举值之后声明 static 字段将不允许在枚举构造函数中使用它们。
因此,只需提取类中的 String 值并在枚举值声明中引用它们即可。

例如:

public final class MyMessageConstant{

    public static final String VAL1 = "Val2";
    public static final String VAL2 = "Val2";

    private MyMessageConstant(){
    }
}

和枚举:

public enum MESSAGE_TYPES {

    KEY1(MyMessageConstant.VAL1),
    KEY2(MyMessageConstant.VAL2),
...
}
<小时/>

如果将 String 值保留为枚举类的私有(private)是有意义的,则可以将常量类声明为枚举的 private static final 类成员:

public enum Types {

    KEY1(MyMessageConstant.VAL1), KEY2(MyMessageConstant.VAL2),...
    KEY4(MyMessageConstant.VAL2),

    private static final class MyMessageConstant {        
       private static final String VAL1 = "Val2";
       private static final String VAL2 = "Val2";        
       private MyMessageConstant() {}
    }

    private String value;

    private Types(String value) {
      this.value = value;
    }

}

关于Java:我可以使用常量字符串作为枚举键值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45694921/

相关文章:

java - XStream 更改通用别名约定

swift - 需要了解ENUM以便在SpriteKit中进行联系

java - java中的枚举值列表

java - 如何在数组中添加枚举类型值

java - 将 ArrayList 转换为 String 并将 String 转换回 ArrayList

java - 可调用语句双方法错误

java - 如何动态更改日期格式

java - 如何以编程方式在 Android 中下载 TTS(文本转语音)的语言环境?

c - C中的枚举数组

Python 枚举类成员