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

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次或更多次。 我怎样才能做到这一点 自动将值提

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

例如:

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!我还有关于枚举的问题。我想看看我们是否可以用枚举来表示它。我回答了一个非常清晰和好的问题。我还有一个关于枚举的问题。我想看看我们是否可以用枚举来表示这样简单。我回答了一个非常清楚和好的问题。