A maioria dos programadores irá atribuir valores numéricos para cada item em uma lista , como os dias da semana , para tornar a codificação mais rápida e para evitar erros de digitação. Algumas linguagens de programação fornecem um tipo de enumerador , ou enum, que permite que você defina um conjunto fixo de constantes em um tipo especial . Usando uma construção enum tem vários benefícios , tais como a melhoria tipo de correspondência, a capacidade de definir métodos personalizados , acesso a membros automáticas fornecidas pelo compilador , e aumento da capacidade de leitura e manutenção do programa global . Anexar métodos personalizados
Quando você usa o tipo de enumeração , você define uma nova classe. Assim como com qualquer outra classe , você pode incluir métodos personalizados e campos na classe . Isso permite que você fornecer a funcionalidade encapsulada relacionada com o tipo de enumeração . Por exemplo, a seguir define uma classe do tipo enum com a latitude e longitude média para os estados norte-americanos. Ele contém um método personalizado , a distância, que calcula a distância entre a latitude e longitude passados como parâmetros para o método
importação java.lang.Math estática * ; . . State public enum { AK ( 61,3850 , -152,2683 ) , AL ( 32,7990 , -86,8073 ) , ... WV ( 38,4680 , -80,9696 ) , WY ( 42,7475 , -107,2085 );
latitude private final double ; longitude dupla final privado ; Estado (latitude duplo , double longitude ) { this.latitude = latitude ; this.longitude = longitude ;} latitude duplo privado () { latitude return;} longitude duplo privado () {return longitude ;} private static final double R = 6,371 ;
distância de casal (duplo lat, lng duplo ) {//lei esférica de cos cosinesreturn (sin ( latitude) * sin ( lat ) + cos (latitude ) * cos ( lat ) + cos (GNL - longitude) ) * R ;} }
avançado tipo Matching
Como o tipo enum é uma classe, ele impõe tipo de correspondência para incluir a comparação com o conjunto de constantes definidas na enumeração . Isso evita erros, assegurando que os parâmetros para funções sempre conterá um valor na classe tipo enum . Por exemplo, se uma função requer uma temporada como um parâmetro, o parâmetro real passado para a função em tempo de execução será comparado com os quatro valores admissíveis definidos pela enumeração :
public enum { Temporada Primavera, Verão , Inverno , QUEDA }; função pública clima (enum Temporada ) {...} ;
Documentação Melhoria
a construção enum torna o código mais fácil de entender e manter . Através da criação de uma construção enum de membros com nomes significativos , você documentar código como criá-la. Por exemplo, declarar um enum chamado "Option" faz com que seja fácil de entender os casos na instrução "switch " :
enum { Opção SALVAR , descarte , CANCELAR }; opção pick ; ... switch ( escolher ) {case SAVE: break; caso DISCARD : break; caso CANCELAR : break; }
métodos Especiais automáticas
Em Java , o compilador insere automaticamente métodos especiais em a classe para tornar mais fácil para executar operações padrão. Por exemplo , o compilador insere automaticamente um método chamado de "valores" que retorna uma matriz de valores constantes enum na ordem em que foram declarados . Isso faz com que a iteração sobre os valores de enumeração muito fácil, como no seguinte exemplo :
para (Mês m: Month.values ()) { System.out.printf ( "% s tem % d dias " , m, m.numberOfDays ()); }