Не удается конвертировать String в enum

344
07 сентября 2017, 17:01
public enum Colors {
    WHITE("white"), LIGHT_GRAY("lightGray"), GRAY("gray"), 
    DARK_GRAY("darkGray"), BLACK("black"), RED("red"), PINK("pink"), 
    ORANGE("orange"), YELLOW("yellow"), GREEN("green"), MAGENTA("magenta"), 
    CYAN("cyan"), BLUE("blue");
    private final String name;
    private Colors(String _name) {
        name = Colors.fromString(_name);//здесь компилятор ругается incompatible types
    }
    public String getName() {
        return name;
    }
    public static Colors fromString(String _name) {
        if (_name != null) {
            for (Colors clr : Colors.values()) {
                if (_name.equalsIgnoreCase(clr.name)) {
                    return clr;
                }
            }
        }
        throw new IllegalArgumentException("No such value");
    }
}
Answer 1

Вы неправильно использовали конструктор для Enum. Кроме того, обычно Enum именуется существительным в единцественном числе.

 public static void main(String[] args) throws Exception {
    System.out.println(Color.fromString("black"));
    System.out.println(Color.fromString("BlaCk"));
    System.out.println(Color.fromString("qqq"));
 }
    public enum Color {
        WHITE("white"), LIGHT_GRAY("lightGray"), GRAY("gray"),
        DARK_GRAY("darkGray"), BLACK("black"), RED("red"), PINK("pink"),
        ORANGE("orange"), YELLOW("yellow"), GREEN("green"), MAGENTA("magenta"),
        CYAN("cyan"), BLUE("blue");
        private final String name;
        Color(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }
        public static Color fromString(String name) {
            for (Color color : Color.values()) {
                if (color.name.equalsIgnoreCase(name)) {
                    return color;
                }
            }
            throw new IllegalArgumentException("No such value '" + name + "'");
        }
    }

Результат:

BLACK
BLACK
Exception in thread "main" java.lang.IllegalArgumentException: No such value 'qqq'
READ ALSO
Сравнение строк в Java по ссылке

Сравнение строк в Java по ссылке

Во многих книгах по java (например, "Философия Java") пишут, что при написании конструкции вида String s = "some string" на самом деле происходит создание...

364
Вызов session scope бина из контроллера

Вызов session scope бина из контроллера

Добрый деньПишу контроллер, который будет через каждое время отправлять по вебсокету на фронтенд данные

337
По каким критериям в Java строка попадает в пул строк?

По каким критериям в Java строка попадает в пул строк?

По сути этот вопрос продолжает другой вопрос

281
Написание SDK для браузерной игры [требует правки]

Написание SDK для браузерной игры [требует правки]

ЗдравствуйтеПишу неофициальный SDK для браузерной игры, который разработчики смогут встраивать в свой проект

253