Alguem poderia me explicar rapidamente sobre enums ?
Obrigado.
??
Enum são estruturas de dados enumeradas e organizadas em ordem de declaração e que tem como funcionalidade principal agrupar valores de mesmo sentido dentro de uma estrutura.
A criação de um enum é feita da mesma forma que a criação de uma classe , porém onde teríamos a palavra reservada class teremos enum.
public enum Armas{
REVOLVER, PISTOLA;
}
Ao criar um enum leve em conta que :
[list]Não é obrigatório que as constantes enums estejam escritas totalmente em maiúsculas, mas, tomando emprestado da convenção de código da Sun que determina quee as constantes tenham os seus nomes em maiúsculas, é uma boa ideia faze-lo.[/list]
[list]Uma estrutura enum deve ter seu próprio arquivo da mesma forma que acontece com as classes públicas. Por exemplo, se nós implementarmos uma classe pública chamada HelloWorld, então, deve haver um arquivo chamado HelloWorld.java. Se criarmos um enumerador chamado Armas, então, deve haver um arquivo chamado Armas.java, entretanto você tmbem pode declarar enums dentro de classes ja existentes[/list]
[list]Estruturas enum não são instanciáveis. Ou seja, estruturas enum não possuem um método construtor, portanto, não há como usar o instanciador new.
Estruturas enum são apenas declaráveis. Portanto, toda a lista de constantes declaradas dentro desta estruturas são acessados estaticamente. Ou seja, nome da variável, mais ponto (.) e o nome da constante (Suposição: mes.JANEIRO).[/list]
[list]Toda estrutura enum possui um método para acessar seus valores em forma de array (vetor) chamado values()[/list]
Ok, legal Criamos um enum chamado Armas, agora se executarmos uma classe com um método main possuindo a linha : System.out.prinln(Armas.PISTOLA);
O Resultado será : REVOLVER
Ai você pergunta e dai ? Isso não me adianta nada pois quando eu me refiro a REVOLVER eu quero me referir ao numero inteiro 100 e quando me refiro a PISTOLA quero me referir ao numero inteiro 200.
Vamos fazer uam alteração em nosso código :
public enum Armas{
REVOLVER(100), PISTOLA(200);
/* Você poderia declarar como public static final código, porém é preferível
* usar a convenção da sun para classes bean.
*/
private int codigo;
//Olha a pegadinha aqui. O construtor tem que ser private
private Armas(int i) {
this.codigo = i;
}
/*
* Garante acesso ao attributo codigo de forma que não sofra alteração externa
*/
public int getCodigo() {
return codigo;
}
}
Desta forma se executarmos em um métodp main a instrução System.out.println(Armas.REVOLVER.getCodigo(), teremos como resultado 100.
Agora imagine uma nova situação, digamos que quando você se referir ao REVOLVER vc queira se referir ao código 100 e ao Calibre 38.
Vamos editar novamente nosso código
[code]
/**
*
- @author Rogerio Santos
*/
public enum Armas{
REVOLVER(100,38), PISTOLA(200,45); //Defino cada Arma com seu código e calibre (Se liga no construtor agora)
/* Você poderia declarar como public static final código, porém é preferível
* usar a convenção de java beans e ter um método get.
*/
private int codigo;
private int calibre;
//Olha a pegadinha aqui. O construtor tem que ser private
private Armas(int i,int calibre) {
this.codigo = i;
this.calibre = calibre;
//Agora tambem estou setando o calibre além do código (Se liga que surgiu um novo get na classe la em baixo)
}
/*
* Garante acesso ao attributo codigo de forma
*/
public int getCodigo() {
return codigo;
}
public int getCalibre() {
return calibre;
}
}[/code]
Executando a linha System.out.println("Código da arma " + Armas.REVOLVER.getCodigo() + " calibre : " + Armas.REVOLVER.getCalibre()); você obterá seguinte resultado :
Código da arma 100 calibre : 38
Existe mais coisas sobre enuns, o que mostrei aqui foi úm quickstart que dará condições de desenvolver o assunto conforme sua necessidade
Referência
http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html
http://www.java2s.com/Code/Java/Language-Basics/Enum.htm
Um recurso avançado dos enums e muito interessante é que eles são ótimas classes para se implementar o Strategy Design Pattern:
http://www.guj.com.br/posts/list/55885.java#293436