Giả sử tôi có một enum:Cách tốt nhất để triển khai `next` và` previous` trên một kiểu enum là gì?
enum E {
A, B, C;
}
Như đã trình bày trong this answer bởi lucasmo, các giá trị enum được lưu trữ trong một mảng tĩnh theo thứ tự mà chúng được khởi tạo, và sau đó bạn có thể lấy (một bản sao của) mảng này với E.values()
.
Bây giờ giả sử tôi muốn thực hiện E#getNext
và E#getPrevious
như rằng tất cả các từ ngữ dưới đây đánh giá để true
:
E.A.getNext() == E.B
E.B.getNext() == E.C
E.C.getNext() == E.A
E.A.getPrevious() == E.C
E.B.getPrevious() == E.A
E.C.getPrevious() == E.B
thực hiện hiện tại của tôi cho getNext
như sau:
public E getNext() {
E[] e = E.values();
int i = 0;
for (; e[i] != this; i++)
;
i++;
i %= e.length;
return e[i];
}
và một tương tự phương thức cho getPrevious
.
Tuy nhiên, mã này có vẻ rườm rà lúc tốt nhất (ví dụ, "trống rỗng" for
vòng lặp, lạm dụng gây tranh cãi của một biến đếm, và có khả năng sai lầm lúc tồi tệ nhất (nghĩ suy, có thể).
Điều gì sẽ là cách tốt nhất để thực hiện getNext
và getPrevious
phương pháp với nhiều loại enum trong Java 7
LƯU ý: tôi làm không có ý định câu hỏi này là chủ quan theo yêu cầu của tôi cho implementa "tốt nhất". tion là viết tắt của yêu cầu cho việc thực hiện đó là nhanh nhất, sạch nhất, và duy trì nhất.
'E.C.getPrevious() == E.C' hoặc' E.C.getPrevious() == E.B'? – johnchen902
@ johnchen902 đã được sửa; xin lỗi – wchargin