Java:我可以使用常量字符串作为枚举键值吗?
我有一个带有多个键的枚举类。 多个键应具有相同的字符串值。 Sonar对我大喊大叫,用常量值替换相同的字符串值 例如:Java:我可以使用常量字符串作为枚举键值吗?,java,enums,Java,Enums,我有一个带有多个键的枚举类。 多个键应具有相同的字符串值。 Sonar对我大喊大叫,用常量值替换相同的字符串值 例如: public enum MESSAGE_TYPES { KEY1("Val1"), KEY2("Val2"), KEY3("Val3"), KEY4("Val2"), KEY5("Val4"), KEY6("Val2"), //etc. } 所以,声纳希望我: 定义一个常量,而不是复制此文本 用于“Val2”,因为它被定义了3次或更多次。 我怎样才能做到这一点 自动将值提
public enum MESSAGE_TYPES {
KEY1("Val1"),
KEY2("Val2"),
KEY3("Val3"),
KEY4("Val2"),
KEY5("Val4"),
KEY6("Val2"),
//etc.
}
所以,声纳希望我:
定义一个常量,而不是复制此文本
用于“Val2”,因为它被定义了3次或更多次。
我怎样才能做到这一点
自动将值提取到常量会将其放在枚举键之后,但是枚举键的值当然无法识别它。
所以,我试着把它放在enum类的顶部
public enum MESSAGE_TYPES {
private static final String VAL2 = "Val2";
KEY1("Val1"),
KEY2(VAL2),
...
}
所以我得到了“语法错误”的错误
请告知
谢谢 在声明枚举值之前,不能在枚举类中声明
静态字段。
并且在枚举值之后声明静态
字段将不允许在枚举构造函数中使用它们。
因此,只需提取类中的字符串
值,并在枚举值声明中引用它们。
例如:
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),
...
}
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;
}
}
如果将字符串
值保留为枚举类的私有值是有意义的,则可以将常量类声明为枚举的私有静态final
类成员:
public enum MESSAGE_TYPES {
KEY1(MyMessageConstant.VAL1),
KEY2(MyMessageConstant.VAL2),
...
}
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;
}
}
在声明枚举值之前,不能在枚举类中声明静态
字段。
并且在枚举值之后声明静态
字段将不允许在枚举构造函数中使用它们。
因此,只需提取类中的字符串
值,并在枚举值声明中引用它们。
例如:
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),
...
}
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;
}
}
如果将字符串
值保留为枚举类的私有值是有意义的,则可以将常量类声明为枚举的私有静态final
类成员:
public enum MESSAGE_TYPES {
KEY1(MyMessageConstant.VAL1),
KEY2(MyMessageConstant.VAL2),
...
}
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命名修道院。枚举常量为大写,但枚举类的名称。。。就像一个普通的类名,因此它应该是MessageTypes!我认为这可以帮助您:)无关:阅读java命名修道院。枚举常量为大写,但枚举类的名称。。。就像一个普通的类名,因此它应该是MessageTypes!我还有关于枚举的问题。我想看看我们是否可以用枚举来表示它。我回答了一个非常清晰和好的问题。我还有一个关于枚举的问题。我想看看我们是否可以用枚举来表示这样简单。我回答了一个非常清楚和好的问题。