Как получить все перечисляемые значения в Java? - PullRequest
82 голосов
/ 16 февраля 2010

Я столкнулся с этой проблемой: мне, не зная фактического типа enum, нужно перебирать его возможные значения.

if (value instanceof Enum){
   Enum enumValue = (Enum)value;
}

Есть идеи, как извлечь из enumValue его возможные значения?

Ответы [ 6 ]

141 голосов
/ 16 февраля 2010
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
77 голосов
/ 20 июня 2013
YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();

Или

YourEnumClass[] yourEnums = YourEnumClass.values();
13 голосов
/ 16 февраля 2010

Enum s похожи на Class es в том, что они напечатаны. Ваш текущий код просто проверяет, является ли он Enum, не указывая, к какому типу Enum он относится.

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

Вы можете сделать это так:

enumValue.getDeclaringClass().getEnumConstants() 

Это вернет массив объектов Enum, каждый из которых является одним из доступных параметров.

9 голосов
/ 12 октября 2015

значения метода enum

метод enum.values ​​(), который возвращает все экземпляры перечисления.

  public class EnumTest {
        private enum Currency {
        PENNY("1 rs"), NICKLE("5 rs"), DIME("10 rs"), QUARTER("25 rs");
        private String value;
        private Currency(String brand) {
              this.value = brand;
        }

        @Override
        public String toString() {
              return value;
        }
  }

  public static void main(String args[]) {

        Currency[] currencies = Currency.values();

        // enum name using name method
        // enum to String using toString() method
        for (Currency currency : currencies) {
              System.out.printf("[ Currency : %s,
                         Value : %s ]%n",currency.name(),currency);
        }
  }
}

http://javaexplorer03.blogspot.in/2015/10/name-and-values-method-of-enum.html

5 голосов
/ 16 февраля 2010

... или MyEnum.values ​​()? Или я что-то упустил?

1 голос
/ 23 июня 2019

Здесь Role - перечисление, которое содержит следующие значения [ADMIN, USER, OTHER].

List<Role> roleList = Arrays.asList(Role.values());
roleList.forEach(role -> {
    System.out.println(role);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...