enum valueOf IllegalArgumentException: нет перечислимого константного класса - PullRequest
5 голосов
/ 19 мая 2011

В прошлом я использовал enums в java, но по какой-то причине я получаю странную ошибку прямо сейчас. Строка кода, который выдает ошибку:

switch(ConfigProperties.valueOf(line[0].toLowerCase()){
    ...
}

Я получаю

java.lang.IllegalArgumentException: No enum const class
  allautomator.ConfigProperties.language 

в строке примера является массивом строк.

Я просто очень запутался сейчас, я не знаю, что может быть не так.

Ответы [ 2 ]

16 голосов
/ 19 мая 2011

Константы перечисления чувствительны к регистру, поэтому убедитесь, что ваши константы действительно строчные. Кроме того, я бы посоветовал вам trim() ввести также, чтобы убедиться, что нет пробелов в начале / конце пробелов:

ConfigProperties.valueOf(line[0].toLowerCase().trim())

Для справки, вот рабочий пример программы, содержащей вашу строку:

enum ConfigProperties { prop1, prop2 }

class Test {
    public static void main(String[] args) {

        String[] line = { "prop1" };

        switch (ConfigProperties.valueOf(line[0].toLowerCase())) {
        case prop1: System.out.println("Property 1"); break;
        case prop2: System.out.println("Property 2"); break;
        }
    }
}

Выход:

Property 1
0 голосов
/ 14 октября 2017

Я использую аналогичную концепцию, но в случае сбоя имею значение по умолчанию

public enum SortType {

    PRICE_ASC("price_asc"),
    PRICE_DESC("price_desc"),
    MODEL_ASC("model_asc"),
    MODEL_DESC("model_desc");

    private String name;

    SortType(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    static public SortType lookup(String id, SortType defaultValue) {
        try {
            return SortType.valueOf(id);
        } catch (IllegalArgumentException ex) {
            return defaultValue;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...