Ex:
public static final int MES_JANEIRO = 1; public static final int MES_FEVEREIRO = 2; public static final int MES_MARCO = 3; //...
Porem usando esse desse tipo, ele tem muita deficiência (tipo multiplicar um pelo outro, igualar, e etc...) e também não existe uma maneira fácil de converter constantes enumeradas int em strings. Programas que usam esse tipo de padrão são muito frágeis.
A partir do Java 1.5 já esta incluso o tipo enum Java. Sua principal funcionalidade é agrupar valores de mesmo sentido e também deixar o código mais legível. No exemplo a seguir agrupamos os nomes dos meses dentro de um enum chamado Mês.
public enum Mes {JANEIRO, FEVEREIRO, MARCO} //...
Assim se você declarar um parâmetro do tipo Mes do qual o objeto passado só poderá receber valores que estão em nosso enum.
Mes m = Mes.JANEIRO // A VARIAVEL M RECEBERA JANEIRO m = Mes.FEVEREIRO // AGORA M RECEBEBERA FEVEREIRO m = Mes.ALGUMACOISA // RESULTA EM ERRO PORQUE "ALGUMACOISA" NÂO // É UM VALOR DO TIPO ENUMERADO MES
Tipos enum's são implicitamente final e suas constantes são static. São usadas com mais freqüência quando se precisar de um conjunto finito de constantes. No enum você também pode adicionar método e campos arbitrários, NUNCA são usados dentro de métodos.
O enumerado é muito semelhante a de uma classe, porém todos seus valores nunca poderão ser modificados. O construtor por exemplo é muito semelhante a de classe, só que sua usabilidade se da somente para indicar o que cada valor contido na constante significa.
Não é aconselhado usar o método “ordinal()” para retornar o valor da posição da constante. É muito melhor armazená-lo em um campo de instancia, pois caso algum dia você alterar seu código e mudar a seqüência das constantes não mudaria os valores delas, como aconteceria se usássemos o método ordinal.
public enum Mes { JANEIRO(1), FEVEREIRO(2), MARCO(3); private final int numeromes; private Mes(int numeromes){ this.numeromes=numeromes; } }
Exemplo de uso de gets, construtor e toString(Override) :
public class Teste { public enum Mes { JANEIRO("Janeiro",31), FEVEREIRO("Fevereiro",28), MARCO("Março",31); //... private final int dias; private final String nome; private Mes(String nome, int dias){ this.nome = nome; this.dias = dias; } public int getDias(){ return dias; } public String getNome(){ return nome; } @Override public String toString(){ return "Mes: "+nome+" tem "+dias+" dias."; } } public static void main(String[] args) { //PERCORRER VALORES for(Mes m : Mes.values()) { System.out.println(m); // Automaticamente // chama m.toString() } } }
Referências:
Java Efetivo do Joshua Block, Arquiteto de Software na Google.
Blog Red Pill do Marcio Torres, Analista e Desenvolvedor de Sistemas/Professor no IFRS
Site Tiexpert, post do Denys William Xavier.
Nenhum comentário:
Postar um comentário