Проблема, с которой сталкиваются разработчики, заключается в необходимости конвертировать порядковый номер перечисления (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, то порядковые номера могут измениться, и код, зависящий от этого, может начать работать некорректно.
Перейти в телеграм, чтобы получить результаты теста



Забрать
Добавить комментарий