Проблема, с которой сталкиваются разработчики, заключается в необходимости конвертировать порядковый номер перечисления (enum) обратно в его тип после передачи его через URL или любой другой канал, который требует сериализации в примитивный тип. Возьмем для примера следующий enum:
public enum ReportTypeEnum { TYPE1, TYPE2, TYPE3 }
Если нужно передать значение этого перечисления через URL, можно использовать метод ordinal()
, который вернет порядковый номер элемента в перечислении. Например, ReportTypeEnum.TYPE2.ordinal()
вернет 1
.
После получения этого порядкового номера на другой стороне, возникает вопрос: как конвертировать его обратно в ReportTypeEnum
?
Решение
В Java есть простое решение для этого. Каждый enum в Java имеет статический метод values()
, который возвращает массив, содержащий все значения данного типа enum в том порядке, в котором они были объявлены.
Таким образом, чтобы получить значение enum по его порядковому номеру, достаточно вызвать этот метод и использовать порядковый номер как индекс в этом массиве.
int ordinal = 1; // полученный порядковый номер ReportTypeEnum type = ReportTypeEnum.values()[ordinal];
В этом примере type
будет равно ReportTypeEnum.TYPE2
, так как TYPE2
имеет порядковый номер 1
в ReportTypeEnum
.
Такой подход прост и легко реализуется. Однако, стоит помнить, что он работает корректно только в случае, если порядок значений в перечислении не меняется. Если вдруг добавить, удалить или переупорядочить значения в enum, то порядковые номера могут измениться, и код, зависящий от этого, может начать работать некорректно.
Добавить комментарий