Працюючи зі змінними / параметрами, які можуть приймати лише обмежену кількість значень, я намагаюся завжди використовувати Java enum
, як в
public enum BonusType {
MONTHLY, YEARLY, ONE_OFF
}
Поки я залишаюся всередині свого коду, це працює чудово. Однак мені часто потрібно взаємодіяти з іншим кодом, який використовує звичайні int
(або String
) значення з тією ж метою, або мені потрібно читати / записувати з / в базу даних, де дані зберігаються у вигляді числа або рядка.
У такому випадку я хотів би мати зручний спосіб пов'язувати кожне значення перерахунку з цілим числом, таким чином, щоб я міг перетворити обидва способи (іншими словами, мені потрібна "оборотна enum").
Перехід від enum до int легко:
public enum BonusType {
public final int id;
BonusType(int id) {
this.id = id;
}
MONTHLY(1), YEARLY(2), ONE_OFF(3);
}
Тоді я можу отримати доступ до значення int як BonusType x = MONTHLY; int id = x.id;
.
Однак я не бачу жодного приємного способу для реверсу, тобто переходу від int до enum. В ідеалі щось подібне
BonusType bt = BonusType.getById(2);
Єдині рішення, які я міг придумати, це:
- Помістіть метод enum в enum, який використовує
BonusType.values()
для заповнення карти "int -> enum", а потім кешує це і використовує його для пошуку. Було б спрацювати, але я повинен був би скопіювати цей метод однаково у кожен перелік, який я використовую :-( - Помістіть метод пошуку в статичний клас корисності. Тоді мені знадобився б лише один метод "пошуку", але мені доведеться поспішати з роздумом, щоб змусити його працювати для довільного перерахунку.
Обидва методи здаються страшенно незручними для такої простої (?) Проблеми.
Будь-які інші ідеї / уявлення?
ordinal()
.ordinal()
), або їх вирішили сторонні сили?