Pular para o conteúdo principal

Java Enum: o que é, pra que serve e como utilizar.

Java Enum o que é?


Introduzida na versão 1.5 do java o enum é uma palavra reservada que significa enumeração,  serve  para definir um conjunto de constantes de enumeração. Constantes enum são implicitamente static e final e você não pode mudar lá o valor, uma vez criado.





Beneficios de Enum :

  1. Enum é type safe você não pode atribuir qualquer outra coisa que não seja uma constante para uma java Enum. 
  2. Enum tem seu proprio name-space. 
  3. Uma das melhores característica de Enum é que você pode usar Enum em Java dentro de uma instrução Switch como int ou um char, dessa forma o código ganha mais legibilidade. 
  4. Adição de novas constantes Enum em Java é fácil, você pode adicionar novas constantes, sem quebrar o código existente. 
  5. As instâncias dos tipos enum são criadas e nomeadas como se fosse uma declaração da classe, sendo fixas e imutáveis (o valor é fixo); 
  6. Não é permitido criar novas instâncias com a palavra chave new; 
  7. O construtor é declarado private, embora não precise de modificador private explícito; 
  8. Seguindo a convenção, por serem objetos constantes e imutáveis (static final), os nomes declarados recebem todas as letras em MAIÚSCULAS; 
  9. As instâncias dos tipos enum devem obrigatoriamente ter apenas um nome; 
  10. Opcionalmente, a declaração do enum pode incluir variáveis de instância, construtor, métodos de instância, de classe, etc.  

Criando enums:

1:  public enum DiasdaSemanaEnum {  
2:    DOMINGO(1),SEGUNDA(2),TERCA(3),QUARTA(4),QUINTA(5),SEXTA(6),SABADO(7);  
3:    private final int value;  
4:    // construtor da classe recebe os valores entre ( ) acima ...  
5:    // ex: na enum DOMINGO value vale 1  
6:    private DiasdaSemanaEnum(int value){   
7:      this.value= value;  
8:    }  
9:  };  

Note que  na linha 9 temos um ponte e virgula , ele é obrigatório , esse arquivo deve ser criado como uma classe normal java em seu próprio arquivo.

Usando enums:

Vamos ver um exemplo do uso de enum com um switch , imagine que em um arquivo criamos o enum e  no outro arquivo vamos utilizar os enum da seguinte maneira :

1:  public class TestedeEnum {  
2:    /**  
3:     * @param args the command line arguments  
4:     */  
5:    public static void main(String[] args) {  
6:      // TODO code application logic here  
7:      DiasdaSemanaEnum dia = DiasdaSemanaEnum.QUARTA;  
8:      switch (dia) {  
9:        case DOMINGO:  
10:          System.out.println("bom descanso hoje é domingo");  
11:          break;  
12:        case SEGUNDA:  
13:          System.out.println("dia de trabalho");  
14:          break;  
15:        case TERCA:  
16:          System.out.println("dia de trabalho");  
17:          break;  
18:        case QUARTA:  
19:          System.out.println("dia de trabalho, mais tarde bola com os amigos");  
20:          break;  
21:        case QUINTA:  
22:          System.out.println("dia de trabalho");  
23:          break;  
24:        case SEXTA:  
25:          System.out.println("dia de trabalho , mas hoje tem happy hour");  
26:          break;  
27:        case SABADO:  
28:          System.out.println("dia de levar as crianças ao clube");  
29:          break;  
30:        default:  
31:          System.out.println("???");  
32:          break;  
33:      }  
34:    }  
35:  }  

Note que o uso de Enum deixa o código bem mais legível para outro programador.
No caso desse código a saída na tela seria a mensagem correspondente a quarta feira .

Outro exemplo do uso de Enum:

O enum como falei é muito utilizado com o switch , veja mais esse exemplo para um menu de aplicação:

1:  public enum OpcoesMenu {       
2:  SALVAR(1), IMPRIMIR(2), ABRIR(3), VISUALIZAR(4), FECHAR(5);   
3:  private final int valor;   
4:  OpcoesMenu(int valorOpcao){   
5:  valor = valorOpcao;   
6:  }   
7:  public int getValor( ){   
8:  return valor;   
9:  }   
10:  };  

Note que usamos nesse enum um método getValor na linha 7 , esse método permite que você obtenha o valor correspondente ao cada um dos enuns declarados.

Agora com esse enum declarado poderíamos utiliza-lo da seguinte maneira:

1:  public class Teste2Enum {  
2:    /**  
3:     * @param args the command line arguments  
4:     */  
5:    public static void main(String[] args) {  
6:      // TODO code application logic here  
7:      OpcoesMenu op = OpcoesMenu.ABRIR;  
8:      switch (op) {  
9:        case SALVAR:  
10:          System.out.println("arquivo salvo");  
11:          break;  
12:        case IMPRIMIR:  
13:          System.out.println("iniciando impressao");  
14:          break;  
15:        case ABRIR:  
16:          System.out.println("abrindo arquivo");  
17:          break;  
18:        case VISUALIZAR:  
19:          System.out.println("visualizando arquivo");  
20:          break;  
21:        case FECHAR:  
22:          System.out.println("arquivo fechado");  
23:          break;  
24:      }  
25:    }  
26:  }  

Claro que isso são só exemplos didáticos, na pratica iríamos capturar um valor da interface gráfica e a partir do valor passado utilizar um dos enums declarados. O importante é que é muito simples declarar outros valores enum sem precisar alterar o código da aplicação, o que nos dá muita flexibilidade de alterar as enumerações quando necessário.
Além disso o uso de enums deixa o código muito mais simples de ler e interpretar.

Outra aplicação que já vi utilizarem por ai é utilizar enum para montar uma tabela de produtos x preços , não recomendo esse uso já que se o numero de intensa crescer o uso de enums começa a ficar complicado, para isso existem os bancos de dados :-) .

Para mais informações  acesse os links abaixo.

Fontes:
http://javarevisited.blogspot.in/2011/08/enum-in-java-example-tutorial.html
http://www.devmedia.com.br/tipos-enum-no-java/25729

Comentários

Postagens mais visitadas deste blog

Projetos em Sala de aula

A educação baseada em projetos vem sendo usada como uma metodologia poderosa para melhor preparar estudantes do século 21, já que leva os alunos a trabalhar em conjunto, se organizar, pesquisar e executar harmonicamente. Porém, antes de levar a metodologia para a sala de aula, será que os professores sabem como e quais projetos trabalhar em suas disciplinas? Uma dessas novidades é o  PBLU (Project Based Learning University ), plataforma gratuita que ajuda a capacitar professores para o uso de projetos em suas disciplinas, como uma forma de agregar conteúdo e motivar os estudantes. Conheça os oito pontos principais para um bom programa de aprendizagem baseada em projeto: Ter conteúdo relevante.   O objetivo da abordagem é trabalhar os conceitos-chave das disciplinas acadêmicas a partir de um projeto. Desenvolver habilidades para o século 21.   Ao longo do projeto, os alunos deverão buscar uma resposta a um problema. Para isso, eles deverão buscar referências...

Video Aulas de Java já disponíveis no 4Shared

Turma segue as video aulas já disponíveis para download no 4Shared , espero que vocês gostem das aulas e por favor postem um comentario no blog dizendo o que vc's acharam preciso desse feed back para o constante aprimoramento das aulas . Basta escolher o arquivo clickar  no link para download ( tenha paciencia os arquivos são grandes ) <p>&lt;p&gt;&amp;amp;amp;amp;lt;p&amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;lt;br&amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;lt;br&amp;amp;amp;amp;amp;amp;amp;gt;se&amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;gt;&lt;/p&gt;</p> Se a Janela de Download acima não funcionar tente acessar os arquivos usando o seguinte link http://www.4shared.com/dir/34812571/bf01348d/VideoAulas.html Bom estudo  :-)

Sistemas distribuidos: Enviando mensagens TCP Parte II - Servidor

Igual ao servidor UDP esse servidor só vai receber a mensagem e envia-la de volta , ou seja é um servidor de ECO mas com boa vontade basta fazer algumas alterações que vc tem um servidor de chat :-) . Server TCP: import java.net.*; import java.io.*; public class TCPServer { public static void main(String[] args) { try { int serverPort = 7896; ServerSocket listenSocket = new ServerSocket(serverPort); //socket de escuta o socket que vai atender as requisições while(true){ Socket client = listenSocket.accept( ); Connection c = new Connection(client); //precisamos criar a classe conection que vai //inicializar nossas threads para atender a cada requisição } } catch (IOException e) { System.out.println("Listem :" + e.getMessage( )); } }//fim do main }//fim da classe Depois de fin...