Как получить экземпляр произвольного перечисления из имени как String - PullRequest
2 голосов
/ 04 октября 2019

Предположим, у меня есть различные перечислимые типы с несколькими константами каждый:

public enum MyEnum1 {

ConstantA(),
ConstantB(),
ConstantC();

}

public enum MyEnum2 {

ConstantA(),
ConstantB(),
ConstantC();

}

Как можно произвольно получить экземпляр одного из этих перечислений из их имени, чтобы я мог вызвать Enum.values() on.

Что-то вроде: Enum<?> myEnumInstance = //something

Цель состоит в том, чтобы вызвать .values() для поиска и извлечения данных внутри констант в произвольном enum на основе ввода текста пользователем.

1 Ответ

1 голос
/ 11 октября 2019

Если ваши перечисленные типы хранят данные, которые предназначены для полиморфного доступа, то они должны реализовать соответствующий интерфейс. Допустим, эти данные представляют собой один int, тогда перечисленные типы могут выглядеть следующим образом (используя IntSupplier ):

public enum MyEnum1 implements IntSupplier {

    ConstantA(1),
    ConstantB(2),
    ConstantC(3);

    private final int number;

    private MyEnum1(int number) { this.number = number; }
    public int getAsInt() { return number; }
}

Затем вы можете использовать этот интерфейс, чтобы получить списокперечислимые значения (константы), которые правильно введены:

IntSupplier[] myEnums = Class.forName("MyEnum1")
            .asSubclass(IntSupplier.class)
            .getEnumConstants();

И используйте это для получения значений:

for(IntSupplier value : myEnums) {
        System.out.println(value.getAsInt());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...