Saya sangat akrab dengan C # tetapi mulai bekerja lebih banyak di Jawa. Saya berharap untuk mengetahui bahwa enum di Jawa pada dasarnya setara dengan yang di C # tetapi ternyata ini tidak terjadi. Awalnya saya senang mengetahui bahwa enum Java dapat berisi banyak data yang tampaknya sangat menguntungkan ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ). Namun, sejak itu saya telah menemukan banyak fitur yang hilang yang sepele di C #, seperti kemampuan untuk dengan mudah menetapkan elemen enum nilai tertentu, dan akibatnya kemampuan untuk mengkonversi integer ke enum tanpa usaha yang layak () yaitu Konversi nilai integer ke Java Enum yang cocok ).
Jadi pertanyaan saya adalah ini: apakah ada manfaat untuk Java enum atas kelas dengan sekelompok bidang final statis publik? Atau apakah itu hanya memberikan sintaks yang lebih kompak?
EDIT: Biarkan saya lebih jelas. Apa manfaat Java enums di atas kelas dengan sekelompok bidang final statis publik dari jenis yang sama ? Sebagai contoh, dalam contoh planet di tautan pertama, apa keuntungan enum dibandingkan kelas dengan konstanta publik ini:
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);
Sejauh yang saya tahu, jawaban casablanca adalah satu-satunya yang memuaskan ini.
S, jadi sekarang kita berbicara tentang kemungkinan meneruskannya ke fungsi, dll. Apakah kita perlu mengetikkan keselamatan? Ya, tidak, tapi kebanyakan orang menganggap tipe c-style "semuanya adalah void*gaya yang bagus" dan itu bisa menghentikan bug (terutama jika melewati lebih dari satu parameter enum / string!). Juga menempatkan konstanta ke dalam namespace mereka sendiri, dll. Bertentangan dengan itu, tidak ada keuntungan nyata untuk hanya memiliki variabel sederhana.
ints, tidak ada jenis keamanan karena seseorang dapat melewati nilai apa pun. Objek yang diketik, di sisi lain, tidak berbeda dengan enum dalam hal keamanan tipe.
public static final, yang mungkin diketik nilai dan tidak harusints.