Почему я не могу получить .values ​​() из класса объекта Enum? - PullRequest
0 голосов
/ 16 декабря 2018

Я хочу создать универсальный метод для любого объекта enum, который будет проверять, имеет ли enum указанное имя значения, но как объект типа Enum я не могу использовать метод values();.Зачем?

Есть ли способ получить значения из объекта типа Enum?

Мне нужен такой метод, чтобы проверить, является ли значение из конфигурации допустимой строкой для myEnum.valueOf(String);, потому что если заданная строка будет неправильной, то она выдаст исключение (а я этого не хочу).

Я хочу, чтобы мой метод выглядел так:

public static Boolean enumContains(Enum en, String valueString){
    return toStringList(en.values()).contains(valueString.toUpperCase());
}

Но нет метода Enum.values().Как правильно создать этот метод?

1 Ответ

0 голосов
/ 16 декабря 2018

Enum#values - это метод, сгенерированный компилятором, поэтому вы не можете использовать его во время компиляции, если не передадите конкретное перечисление, а не Enum<?>.

См .: https://stackoverflow.com/a/13659231/7294647

Одним из решений было бы вместо этого передать Class<E extends Enum<E>> и использовать Class#getEnumConstants:

public static <E extends Enum<E>> Boolean enumContains(Class<E> clazz, String valueString){
    return toStringList(clazz.getEnumConstants()).contains(valueString.toUpperCase());
}

Если у вас есть перечисление с именем MyEnum, тогда вы можете просто передать MyEnum.classв качестве первого аргумента.

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