Lorsque je travaille avec des variables / paramètres qui ne peuvent prendre qu'un nombre fini de valeurs, j'essaie de toujours utiliser Java enum
, comme dans
public enum BonusType {
MONTHLY, YEARLY, ONE_OFF
}
Tant que je reste dans mon code, cela fonctionne très bien. Cependant, j'ai souvent besoin de m'interfacer avec un autre code qui utilise des valeurs simples int
(ou String
) dans le même but, ou j'ai besoin de lire / écrire depuis / vers une base de données où les données sont stockées sous forme de nombre ou de chaîne.
Dans ce cas, j'aimerais avoir un moyen pratique d'associer chaque valeur d'énumération à un entier, de sorte que je puisse convertir dans les deux sens (en d'autres termes, j'ai besoin d'une "énumération réversible").
Passer de enum à int est facile:
public enum BonusType {
public final int id;
BonusType(int id) {
this.id = id;
}
MONTHLY(1), YEARLY(2), ONE_OFF(3);
}
Ensuite, je peux accéder à la valeur int comme BonusType x = MONTHLY; int id = x.id;
.
Cependant, je ne vois pas de bon moyen pour l'inverse, c'est-à-dire passer de int à enum. Idéalement, quelque chose comme
BonusType bt = BonusType.getById(2);
Les seules solutions que je pourrais proposer sont:
- Mettez une méthode de recherche dans l'énumération, qui utilise
BonusType.values()
pour remplir une carte "int -> enum", puis la met en cache et l'utilise pour les recherches. Cela fonctionnerait, mais je devrais copier cette méthode de manière identique dans chaque énumération que j'utilise :-(. - Placez la méthode de recherche dans une classe utilitaire statique. Ensuite, je n'aurais besoin que d'une méthode de «recherche», mais je devrais bricoler avec la réflexion pour que cela fonctionne pour une énumération arbitraire.
Les deux méthodes semblent terriblement maladroites pour un problème aussi simple (?).
Avez-vous d'autres idées / idées?
ordinal()
.ordinal()
peuvent-elles être décidées par vous (c'est-à-dire, ne pouvez-vous pas simplement les utiliser ), ou sont-elles décidées par des forces extérieures?