J'ai une énumération en Java:
public enum Months
{
JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
}
Je veux accéder aux valeurs d'énumération par index, par exemple
Months(1) = JAN;
Months(2) = FEB;
...
Comment dois-je faire ça?
Month
versions ultérieures sont livrées avec une énumération intégrée.Réponses:
Essaye ça
la source
public static final ArrayList<Months> ALL = new ArrayList<Month>() {{ for (Months m : Months.values()) add(m); }};
Months i = ALL.get(index)
Voici trois façons de procéder.
la source
public static
mutable (à la fois tableau et nonfinal
). Euw. Et celaIllegalArgumentException
aurait beaucoup plus de sens que de renvoyer unenull
bombe.J'ai juste essayé la même chose et j'ai trouvé la solution suivante:
La classe a ses propres valeurs enregistrées dans un tableau, et j'utilise le tableau pour obtenir l'énumération à l'indexposition. Comme mentionné ci-dessus, les tableaux commencent à compter à partir de 0, si vous voulez que votre index commence à '1', changez simplement ces deux méthodes pour:
À l'intérieur de ma main, j'obtiens l'objet de pays nécessaire avec
qui définit currCountry sur le dernier pays, dans ce cas, Countries.KENTUCKY.
N'oubliez pas que ce code est très affecté par ArrayOutOfBoundsExceptions si vous utilisez des indices codés en dur pour obtenir vos objets.
la source
J'ai récemment eu le même problème et j'ai utilisé la solution fournie par Harry Joy. Cette solution ne fonctionne qu'avec une énumération à base zéro. Je ne le considérerais pas non plus comme une sauvegarde car il ne traite pas les index qui sont hors de portée.
La solution que j'ai fini par utiliser n'est peut-être pas aussi simple, mais elle est complètement sauvegardée et ne nuira pas aux performances de votre code même avec de grandes énumérations:
Si vous êtes sûr que vous ne serez jamais hors de portée de votre index et que vous ne voulez pas utiliser
UNKNOWN
comme je l'ai fait ci-dessus, vous pouvez bien sûr également faire:la source