2011-01-24 22 views
5

Tại sao trật tự kê khai quan trọng đối với sự đếm Java, ý tôi là tại sao đưa cái này (thời gian biên dịch) lỗiTrình tự các trường thành viên trong Enum

public enum ErrorCodes { 
    public int id; 
    Undefined; 
} 

nhưng điều này là tốt:

public enum ErrorCodes { 
    Undefined; 
    public int id; 

}. 

Trả lời

5

Bởi vì đây là cú pháp cho enums. Nó có thể cho phép các đơn đặt hàng khác nhau tuy nhiên điều này có thể đã được mở cho những sai lầm như quên đặt một loại trên một lĩnh vực và biến nó thành một giá trị enum.

EDIT: Lý do tôi nói rằng chúng có thể theo thứ tự bất kỳ là các trường, phương thức, trình khởi tạo và trình xây dựng có thể theo thứ tự bất kỳ. Tôi tin rằng hạn chế là hợp lệ nếu nó là để giảm sai lầm. Mặc dù các lĩnh vực/nhà xây dựng/phương pháp có thể được theo thứ tự bất kỳ của nó rất phổ biến để xem chúng theo thứ tự đó để dễ đọc.

+2

+1 - Nếu thứ tự không bị ràng buộc, các enums sẽ khó đọc hơn, cú pháp sẽ khó phân tích cú pháp hơn và các thông báo lỗi cú pháp sẽ kém hiểu hơn. –

6

Nó không phải là một câu trả lời rất thỏa mãn, nhưng nó chỉ là cách enums được định nghĩa trong Java. Xem phần 8.9 Enums trong Đặc tả Ngôn ngữ Java.

1

Java Enum là một loại đặc biệt của lớp. hình thức đơn giản và chủ yếu là hữu ích của nó không chứa các lĩnh vực tùy chỉnh:

public enum ErrorCodes { 
    Undefined, Defined, Foo, Bar 
} 

biên dịch ma thuật tạo ra lớp trông xấp xỉ như sau:

public class ErrorCodes { 
    public final static ErrorCodes Undefined = new ErrorCodes(); 
    public final static ErrorCodes Defined = new ErrorCodes(); 
    public final static ErrorCodes Foo = new ErrorCodes(); 
    public final static ErrorCodes Bar = new ErrorCodes(); 
} 

biên dịch ma thuật này hy vọng đúng lĩnh vực định nghĩa sau header enum.

Mặt trời thật tử tế để cho phép chúng tôi thêm các trường như vậy theo định nghĩa của thành viên eunum: enum công khai ErrorCodes { Chưa xác định, Được xác định, Foo, Bar; riêng myField String; }

Đây là lý do mã tùy chỉnh của bạn luôn phải được xác định sau trường enum.

+0

Nó không phải là "trình biên dịch ma thuật" ... nó là phổ biến hoặc vườn "cú pháp". –

Các vấn đề liên quan