Я столкнулся с этой проблемой, потому что, не зная фактического enum
типа, мне нужно перебрать его возможные значения.
if (value instanceof Enum){
Enum enumValue = (Enum)value;
}
Есть идеи, как извлечь из enumValue его возможные значения?
Object[] possibleValues = enumValue.getDeclaringClass().getEnumConstants();
getClass()
чтоenum
объект может возвращать подтип самогоenum
типа (если, скажем,enum
константа переопределяет метод изenum
типа).getDeclaringClass()
возвращаетenum
тип, который объявил эту константу, что вам и нужно здесь.Или
источник
YourEnumClass[] yourEnums = YourEnumClass.class.getEnumConstants();
решил мою проблему вызова из нестатического метода.Enum
s похожи наClass
es в том, что они набраны. Ваш текущий код просто проверяет, является ли это Enum, не указывая, частью какого типа Enum он является.Поскольку вы не указали тип перечисления, вам придется использовать отражение, чтобы узнать, что такое список значений перечисления.
Сделать это можно так:
Это вернет массив объектов Enum, каждый из которых является одним из доступных вариантов.
источник
values метод перечисления
enum.values (), который возвращает все экземпляры перечисления.
http://javaexplorer03.blogspot.in/2015/10/name-and-values-method-of-enum.html
источник
... или MyEnum.values ()? Или я что-то упускаю?
источник
Здесь Role - это перечисление, которое содержит следующие значения [ADMIN, USER, OTHER].
источник
Также можно использовать java.util.EnumSet следующим образом
источник