public enum MyEnum1 {
FOO(BAR), BAR(FOO);
private MyEnum1 other;
private MyEnum1(MyEnum1 other) {
this.other = other;
}
public MyEnum1 getOther() {
return other;
}
}
MyEnum1
tạo ra lỗi Cannot reference a field before it is defined
, đó là khá dễ hiểu, vì trật tự tuyên bố vấn đề ở đây. Nhưng tại sao biên dịch sau đây?Dường như tôi * có thể tham khảo một lĩnh vực trước khi nó được định nghĩa *
public enum MyEnum2 {
FOO { public MyEnum2 getOther() { return BAR; } },
BAR { public MyEnum2 getOther() { return FOO; } };
public abstract MyEnum2 getOther();
}
FOO
đề cập đến BAR
trước BAR
được định nghĩa, tôi sai?
Không phải hằng số 'enum' được biên dịch thành các cấu trúc tương tự như các lớp? Trả về 'BAR', bạn đang thực sự đề cập đến một kiểu. Đọc [ở đây] (http://stackoverflow.com/questions/7276775/what-does-java-compile-an-enumeration-down-to): _set giá trị hợp lệ được tạo tại thời điểm khởi tạo kiểu_ –
[JLS] (http : //docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.1) nói _Sơ thể lớp tùy chọn của một hằng số enum ngầm định nghĩa một khai báo lớp ẩn danh (§15.9. 5) mở rộng kiểu enum kèm theo ngay lập tức._ –