Lorsque l'on travaille avec des variables et des 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 bien. Cependant, j'ai souvent besoin de faire l'interface avec un autre code qui utilise la plaine int
(ou String
) des valeurs pour le même but, ou j'ai besoin de lire/écrire dans une base de données où les données sont stockées comme un nombre ou une chaîne.
Dans ce cas, j'aimerais avoir un moyen commode d'associer à chaque valeur d'enum avec un entier, tel que je peux le convertir à la fois des moyens (en d'autres mots, j'ai besoin d'un "réversible " enum").
Allant de enum type 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 à l'int valeur BonusType x = MONTHLY; int id = x.id;
.
Cependant, je ne vois pas de bonne façon pour l'inverse, c'est à dire en allant de int enum. Idéalement, quelque chose comme
BonusType bt = BonusType.getById(2);
Les seules solutions que je pouvais venir sont:
- Mettre une méthode de recherche dans l'enum, qui utilise
BonusType.values()
de remplir une carte "int -> enum", puis les caches et les utilise pour effectuer des recherches. Mais je dois copier cette méthode de manière identique dans chaque enum j'utilise :-(. - Mettre la méthode de recherche dans une statique de la classe utilitaire. Ensuite, j'ai seulement besoin d'une "recherche" de la méthode, mais j'ai dû jouer avec la réflexion pour faire fonctionner l'arbitraire d'un enum.
Les deux méthodes semblent terriblement maladroite pour un simple (?) problème.
D'autres idées/idées?