Nhất lý do hợp lệ chung để muốn hằng số nguyên được kết hợp với mỗi giá trị enum là tương thích với một số thành phần khác mà vẫn mong đợi các số nguyên đó (ví dụ: giao thức tuần tự hóa mà bạn không thể thay đổi, hoặc enums đại diện cho các cột trong bảng, vv).
Trong hầu hết các trường hợp, tôi khuyên bạn nên sử dụng EnumMap
để thay thế. Nó tách rời các thành phần hoàn toàn hơn, nếu đó là mối quan tâm, hoặc nếu enums đại diện cho các chỉ mục cột hoặc một cái gì đó tương tự, bạn có thể dễ dàng thay đổi sau này (hoặc ngay cả khi chạy nếu cần).
private final EnumMap<Page, Integer> pageIndexes = new EnumMap<Page, Integer>(Page.class);
pageIndexes.put(Page.SIGN_CREATE, 1);
//etc., ...
int createIndex = pageIndexes.get(Page.SIGN_CREATE);
Nó thường cực kỳ hiệu quả.
Việc thêm dữ liệu như thế này vào bản thân enum có thể rất mạnh, nhưng thường xuyên hơn là không bị lạm dụng.
Edit: Chỉ cần nhận ra Bloch quyết này trong Effective Java/2nd edition, trong mục 33: Sử dụng EnumMap
thay vì chỉ mục thứ.
Nguồn
2010-10-21 18:16:13
Điều đó sẽ không biên dịch; bạn đã xác định "SIGN_CREATE" hai lần. Ngoài ra, đó không phải là hằng số - chúng không phải là "cuối cùng". – BlairHippo