Comment obtenir la valeur Enum d’index en Java?

J’ai un enum en Java:

public enum Months { JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC } 

Je veux accéder aux valeurs énumérées par index, par exemple

 Months(1) = JAN; Months(2) = FEB; ... 

Comment vais-je faire ça?

Essaye ça

 Months.values()[index] 

Voici trois façons de le faire.

 public enum Months { JAN(1), FEB(2), MAR(3), APR(4), MAY(5), JUN(6), JUL(7), AUG(8), SEP(9), OCT(10), NOV(11), DEC(12); int monthOrdinal = 0; Months(int ord) { this.monthOrdinal = ord; } public static Months byOrdinal2ndWay(int ord) { return Months.values()[ord-1]; // less safe } public static Months byOrdinal(int ord) { for (Months m : Months.values()) { if (m.monthOrdinal == ord) { return m; } } return null; } public static Months[] MONTHS_INDEXED = new Months[] { null, JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC }; } import static junit.framework.Assert.assertEquals; import org.junit.Test; public class MonthsTest { @Test public void test_indexed_access() { assertEquals(Months.MONTHS_INDEXED[1], Months.JAN); assertEquals(Months.MONTHS_INDEXED[2], Months.FEB); assertEquals(Months.byOrdinal(1), Months.JAN); assertEquals(Months.byOrdinal(2), Months.FEB); assertEquals(Months.byOrdinal2ndWay(1), Months.JAN); assertEquals(Months.byOrdinal2ndWay(2), Months.FEB); } } 

Essayez d’utiliser EnumMap ou EnumSet ?

Découvrez le tutoriel java sur enum (exemple avec les planètes)

http://download.oracle.com/javase/tutorial/java/javaOO/enum.html

Je viens d’essayer la même chose et propose la solution suivante:

 public enum Counsortinges { TEXAS, FLORIDA, OKLAHOMA, KENTUCKY; private static Counsortinges[] list = Counsortinges.values(); public static Counsortinges getCountry(int i) { return list[i]; } public static int listGetLastIndex() { return list.length - 1; } } 

La classe a ses propres valeurs enregistrées dans un tableau, et j’utilise le tableau pour obtenir l’énumération lors de l’indexation. Comme mentionné ci-dessus, les tableaux commencent à compter à partir de 0. Si vous souhaitez que votre index commence par «1», changez simplement ces deux méthodes pour:

 public static Ssortingng getCountry(int i) { return list[(i - 1)]; } public static int listGetLastIndex() { return list.length; } 

À l’intérieur de mon principal, j’obtiens l’object pays nécessaire avec

 public static void main(Ssortingng[] args) { int i = Counsortinges.listGetLastIndex(); Counsortinges currCountry = Counsortinges.getCountry(i); } 

qui définit currCountry sur le dernier pays, dans ce cas Pays.KENTUCKY.

Rappelez-vous simplement que ce code est très affecté par ArrayOutOfBoundsExceptions si vous utilisez des indices codés en dur pour récupérer vos objects.