Я дуже добре знайомий з C #, але починаю більше працювати на Java. Я очікував, що я дізнаюся, що перерахунки на Java в основному еквівалентні тим, що в C #, але, мабуть, це не так. Спочатку я був із задоволенням дізнався, що переліки Java можуть містити кілька даних, що видається дуже вигідним ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ). Однак з тих пір я виявив безліч особливостей, які є тривіальними в C #, такі як здатність легко присвоїти елементу enum певне значення, а отже, можливість перетворити ціле число на enum без гідної кількості зусиль ( тобто перетворити ціле значення у відповідність 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);
Наскільки я можу сказати, відповідь casablanca - це єдине, що задовольняє це.
S
, тому зараз ми говоримо про певне перенесення їх у функції тощо. Чи потрібен нам тип-сафтей? Ну, ні, але тоді більшість людей вважають типи с-стилю "все void*
" хорошим стилем, і це може зупинити помилки (особливо, якщо передається більше одного параметра enum / string!). Крім того, він розміщує константи у власному просторі імен тощо. На відміну від цього, немає реальної переваги просто мати прості змінні.
int
s не існує безпеки типу, оскільки можна передати будь-яке значення. Набрані об'єкти, з іншого боку, нічим не відрізняються від перерахунків з точки зору безпеки типу.
public static final
поля, в яких можуть бути набрані значення, а не обов'язковоint
s.