Как сделать значение ключа как enum в java [duplicate]

3

Мне нужно создать enun, содержащий некоторые строки с пробелами и их значениями в int, например:

public enum status{
Active(1),
In Active(2);
}

потому что я использую его с спящим режимом, а также преобразую его в JSON для форм alpaca js.

как:

[{"text": "In Active", "value":"2"},{"text": "Active", "value":"1"}]

Я застрял сделать перечисление, как сделать такой тип перечисления.

  • 0
    он не повторяется, потому что я использую аннотированный бин hibernate, в котором он используется, поэтому мне нужны ключ и значение с пробелами, ссылка, которой вы поделились, делает enum со значением в виде строки, но его ключ не целочисленный, это также строка
  • 0
    Вы уверены, что enum - единственный способ решить эту проблему?
Показать ещё 4 комментария
Теги:
hibernate
enums
alpacajs

3 ответа

19

Вы не можете поместить пространство между строками. Вместо этого вы можете использовать подчеркивание следующим образом:

In_Active

Вы можете использовать этот способ:

enum Status {

    ACTIVE("Active", 1), IN_ACTIVE("In Active", 2);

    private final String key;
    private final Integer value;

    Status(String key, Integer value) {
        this.key = key;
        this.value = value;
    }

    public String getKey() {
        return key;
    }
    public Integer getValue() {
        return value;
    }
}
  • 0
    да, я знаю, что не могу, но мне это нужно
  • 0
    Пожалуйста, проверьте модифицированный ответ.
Показать ещё 4 комментария
5

Вы можете хранить несколько значений в одном enum и даже иметь геттеры для их обработки. Вот пример, который я использовал однажды (я пытаюсь адаптировать его к вашей проблеме):

public enum Status{

    ACTIVE(1, "Active"),
    INACTIVE(2, "In Active");

    private final Integer value;
    private final String text;

    /**
     * A mapping between the integer code and its corresponding text to facilitate lookup by code.
     */
    private static Map<Integer, Status> valueToTextMapping;

    private Status(Integer value, String text){
        this.value = value;
        this.text = text;
    }

    public static Status getStatus(Integer i){
        if(valueToTextMapping == null){
            initMapping();
        }
        return valueToTextMapping.get(i);
    }

    private static void initMapping(){
        valueToTextMapping = new HashMap<>();
        for(Status s : values()){
            valueToTextMapping.put(s.value, s);
        }
    }

    public Integer getValue(){
        return value;
    }

    public String getText(){
        return text;
    }

    @Override
    public String toString(){
        final StringBuilder sb = new StringBuilder();
        sb.append("Status");
        sb.append("{value=").append(value);
        sb.append(", text='").append(text).append('\'')
        sb.append('}');
        return sb.toString();
    }
}

Таким образом, в вашем коде вы можете просто использовать Status.ACTIVE и он будет представлять экземпляр вашего Enum, который содержит value и text так, как вы этого хотите.

  • 0
    Извините, я немного опоздал, не видел ответа Чанданы Кумары
  • 0
    Отлично, но не могли бы вы мне помочь, почему автоматически сгенерированный бин hibernate имеет имя в виде строки, а не текста?
Показать ещё 3 комментария
0

Вы не можете помещать пробел в середину идентификатора.

Проверьте эту ссылку. Можно ли присвоить числовое значение перечислению в Java? для присвоения значения перечислению в java.

  • 0
    спасибо, но это значение не имеет пробелов
  • 0
    Разве ваши значения перечисления не являются типом int?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню