Dưới đây là ba cách để thực hiện.
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);
}
}
Nguồn
2011-07-14 12:01:22
Trong khoa học máy tính, các chỉ mục bắt đầu bằng 0, không phải 1 ;-) – fredoverflow
Bạn có chắc chắn muốn? Nói chung, bạn không nên chạm vào thứ tự, ngoài việc thực hiện các cấu trúc dữ liệu cấp thấp (và sau đó, sử dụng các cơ chế thay thế, chẳng hạn như tên, cho sự kiên trì). –
Bạn cũng có thể đã sử dụng các hằng số trong lớp java.util.Calendar. Chúng được đánh số từ 0 - 11 cho tháng 1 - tháng 12. Hãy cẩn thận với 12 vì đó là UnDecember (một số thứ cần làm với âm lịch). Nhưng tôi chỉ tò mò tại sao tái phát minh ra các bánh xe của hằng số tháng mà đã đến "cổ phiếu" trong JRE? –