Tôi rất quen thuộc với C # nhưng bắt đầu làm việc nhiều hơn với Java. Tôi dự kiến sẽ học được rằng enum trong Java về cơ bản tương đương với những người trong C # nhưng rõ ràng đây không phải là trường hợp. Ban đầu, tôi rất hào hứng khi biết rằng các enum Java có thể chứa nhiều phần dữ liệu có vẻ rất thuận lợi ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ). Tuy nhiên, kể từ đó, tôi đã tìm thấy rất nhiều tính năng bị thiếu trong C #, chẳng hạn như khả năng dễ dàng gán một phần tử enum một giá trị nhất định và do đó khả năng chuyển đổi một số nguyên thành enum mà không cần nỗ lực nhiều ( tức là Chuyển đổi giá trị số nguyên để khớp với Enum Java ).
Vì vậy, câu hỏi của tôi là: có bất kỳ lợi ích nào cho các enum Java đối với một lớp với một loạt các trường cuối cùng tĩnh công khai không? Hay nó chỉ cung cấp cú pháp nhỏ gọn hơn?
EDIT: Hãy để tôi rõ ràng hơn. Lợi ích của các enum Java đối với một lớp với một loạt các trường cuối cùng tĩnh công khai cùng loại là gì? Ví dụ, trong ví dụ về các hành tinh ở liên kết đầu tiên, lợi thế của enum so với một lớp có các hằng số công khai này là gì:
public static final Planet MERCURY = new Planet(3.303e+23, 2.4397e6);
public static final Planet VENUS = new Planet(4.869e+24, 6.0518e6);
public static final Planet EARTH = new Planet(5.976e+24, 6.37814e6);
public static final Planet MARS = new Planet(6.421e+23, 3.3972e6);
public static final Planet JUPITER = new Planet(1.9e+27, 7.1492e7);
public static final Planet SATURN = new Planet(5.688e+26, 6.0268e7);
public static final Planet URANUS = new Planet(8.686e+25, 2.5559e7);
public static final Planet NEPTUNE = new Planet(1.024e+26, 2.4746e7);
Theo như tôi có thể nói, câu trả lời của caskish là người duy nhất thỏa mãn điều này.
S
, vì vậy bây giờ chúng ta đang nói về việc có thể chuyển chúng vào các chức năng, v.v. Chúng ta có cần loại saftey không? Chà, không, nhưng sau đó hầu hết mọi người coi các kiểu "mọi thứ void*
" là kiểu tốt và nó có thể ngăn chặn các lỗi (đặc biệt là nếu truyền nhiều hơn một tham số enum / chuỗi!). Ngoài ra, nó đặt các hằng số vào không gian tên của riêng chúng, v.v ... Trái với điều đó, không có lợi thế thực sự khi chỉ có các biến đơn giản.
int
s, không có loại an toàn vì người ta có thể vượt qua bất kỳ giá trị nào. Mặt khác, các đối tượng đánh máy không khác gì enum về độ an toàn của loại.
public static final
các trường, có thể là các giá trị được nhập và không nhất thiết phảiint
là s.