Я очень хорошо знаком с С#, но начинаю больше работать на Java. Я ожидал узнать, что перечисления на Java в основном эквивалентны перечислениям на С#, но, видимо, это не так. Первоначально я был рад узнать, что перечисления Java могут содержать несколько фрагментов данных, которые кажутся очень выгодными (http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html). Однако с тех пор я обнаружил много недостающих функций, которые тривиальны в С#, такие как возможность легко назначить элементу перечисления определенное значение и, следовательно, способность конвертировать целое число в перечисление без приличного количества усилий ( т.е. Преобразование целочисленного значения в соответствие Java Enum).
Итак, мой вопрос заключается в следующем: есть ли какая-либо польза для перечислений Java над классом с кучей открытых статических конечных полей? Или он просто обеспечивает более компактный синтаксис?
EDIT: Позвольте мне быть более ясным. В чем преимущество перечислений Java над классом с кучей открытых статических конечных полей того же типа? Например, в примере с планетами по первому каналу, в чем преимущество переименования над классом с этими открытыми константами:
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);
Насколько я могу судить, ответ Касабланки - единственный, который удовлетворяет этому.