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.