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