我有一个带有几个键的枚举类。 许多键应具有相同的字符串值。 Sonar对我大吼大叫,用一个常数值替换相同的字符串值。
例如:
public enum MESSAGE_TYPES {
KEY1("Val1"),
KEY2("Val2"),
KEY3("Val3"),
KEY4("Val2"),
KEY5("Val4"),
KEY6("Val2"),
//etc.
}
所以,声纳要我:
定义一个常量而不是复制这个文字......
表示“Val2”,因为它定义了3次或更多次。 我怎样才能做到这一点?
自动将值提取为常量会将其置于枚举键之后,但是当然,枚举键的值无法识别它。 所以,我试图把它放在枚举类
之上public enum MESSAGE_TYPES {
private static final String VAL2 = "Val2";
KEY1("Val1"),
KEY2(VAL2),
...
}
因此我在行上收到“语法错误”错误。
请告知。
谢谢!
答案 0 :(得分:4)
在声明枚举值之前,您无法在枚举类中声明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
值保持为enum类的私有值,则可以将常量类声明为枚举的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;
}
}