Eu estou muito familiarizado com o C #, mas começando a trabalhar mais em Java. Eu esperava aprender que as enums em Java eram basicamente equivalentes às do C #, mas aparentemente esse não é o caso. Inicialmente, fiquei empolgado ao saber que as enumerações Java podiam conter vários dados, o que parece muito vantajoso ( http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html ). No entanto, desde então, encontrei muitos recursos ausentes que são triviais em C #, como a capacidade de atribuir facilmente um elemento de enum a um determinado valor e, consequentemente, a capacidade de converter um número inteiro em enum sem uma quantidade razoável de esforço ( ie Converter valor inteiro para Java Enum correspondente ).
Então, minha pergunta é a seguinte: existe algum benefício para as enumerações de Java sobre uma classe com vários campos finais estáticos públicos? Ou apenas fornece uma sintaxe mais compacta?
EDIT: Deixe-me ser mais claro. Qual é o benefício das enumerações Java sobre uma classe com vários campos finais estáticos públicos do mesmo tipo ? Por exemplo, no exemplo de planetas no primeiro link, qual é a vantagem de um enum sobre uma classe com essas constantes públicas:
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);
Tanto quanto posso dizer, a resposta de casablanca é a única que satisfaz isso.
S
, então agora estamos falando de provavelmente passá-los para funções, etc. Precisamos de segurança de tipo? Bem, não, mas a maioria das pessoas considera os tipos c de estilo "tudo é um void*
" bom e isso pode impedir bugs (especialmente se você passar mais de um parâmetro enum / string!). Além disso, coloca as constantes em seu próprio espaço para nome, etc. Ao contrário disso, não há vantagem real em ter apenas variáveis simples.
int
s, não existe um tipo de segurança, pois é possível transmitir qualquer valor. Os objetos digitados, por outro lado, não são diferentes das enumerações em termos de segurança de tipo.
public static final
campos, que podem ser valores digitados e não necessariamenteint
s.