Java: Как внешне инициировать Enum без IF / SWITCH - PullRequest
0 голосов
/ 13 марта 2019

У меня есть Enum, и мне нравится использовать его как отображение между символическим именем (NORMAL, SPICY, HOT) и связанными с ним значениями (11, 22, 33).

Допустим, программа должна использовать символы, а в базе данных хранятся значения.

public static enum MyEnum
{ 
    NORMAL (11),        
    SPICY (22),     
    HOT (33);

    private int n;

    MyEnum (int n)    // must be a private constructor because of Java
    {
        this.n = n;
    }

    public static void initFromNumber (int n)
    {
        // ??? how to do that
    }

    public int get ()
    {
        return this.n;
    }
};

Теперь я читаю из базы данных и пытаюсь создать / инициализировать Enum.

Как я могу сделать это с помощью Enum (для меня понятно, делать это с классом) и без большого IF или SWITCH в нем? Есть ли «элегантный» способ?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Enum является одиночным, и вы не можете просто его инициализировать. Скорее всего, вы хотите получить значение enum по номеру. Вы можете сделать это с помощью потока:

public static void initFromNumber (int n)
    MyEnum enumValue = Arrays.stream(MyEnum.values())
            .filter(myEnum -> myEnum.get() == n)
            .findFirst().orElseThrow();
}
1 голос
/ 13 марта 2019

Обычно в моих приложениях я перебираю все значения и нахожу подходящие.

public static MyEnum getByNumber(int n) {
    for (final MyEnum value : values()) {
        if (value.n == n) {
            return value;
        }
    }
    throw new IllegalArgumentException("No MyEnum found for n: " + n);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...