Aquí hay tres maneras de hacerlo.
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);
}
}
En informática, los índices comienzan en 0, no en 1 ;-) – fredoverflow
¿Estás seguro de que quieres? En general, no debe tocar el ordinal, aparte de implementar estructuras de datos de bajo nivel (y luego usar mecanismos alternativos, como el nombre, para la persistencia). –
También podría haber usado las constantes en la clase java.util.Calendar también. Están numerados del 0 al 11 de enero a diciembre. Tenga cuidado con 12 ya que es diciembre (algo que tiene que ver con el calendario lunar). Pero estoy curioso por qué reinventar la rueda de constantes de mes que ya viene "en existencia" en el JRE. –