Classe ENUM

oi,

ja procurei pela net e nao achei uma boa explica para oq eh e como usar classe ENUM, alguem poderia me ajudar??

abraço

1 curtida

Enumerações

Até a versão 1.4 da plataforma Java, muito frequentemente eram utilizadas constantes estáticas inteiras para representar um conjunto finito de tipos,

tais como cores, dias da semana, tipos de produtos, status de pedidos e outros, dados que geralmente estão associados a uma classe e não estão persistidos.

No java5 foi criado um novo tipo de dado denominado enumeração(enum). Este novo tipo garante o uso de valores pertencentes a um conjunto pré-definido,

ou seja, garante o uso de tipos seguros, daí também ser conhecido por type-safe enumeration.

Dica:

Enum também é uma classe.

Enum usa constantes, ou seja letras maiúsculas, Exemplo: PESSOA_JURIDICA.

Um construtor de enum só pode apresentar os modificadores default e private.

Enum é um tipo especial de classe, posso criar classe dentro de classe.

Apesar de terem uma sintaxe um pouco diferente, as enumerações são classes! São classes que herdam da classe java.lang.enum

Os valores dentro da enumeração escrevem-se em maiúsculas pois também são cons-tantes. Mas especificamente, são public static final.

Os métodos mais úteis são provavemente os seguintes três:


? String toString()

? static T valueOf()

? int ordinal()

Usando enumerações

Para declarar uma enumeração utiliza-se a palavra-chave enum seguida do nome desejado e seguindo a convenção de nomes das classes(iniciando com maiúscula).

Exemplo:


public class Cliente {

      

       public enum TipoCliente{ PESSOA_FISICA, PESSOA_JURIDICA };

       private TipoCliente tipo;

      

       private String nome;

       private String email;

 

}

O exemplo acima declara uma enumeração com dois valores somente: PESSOA_JURIDICA e PESSOA_FISICA.

Note que a propriedade / atributo que irá receber um valor da enumeração na classe, neste caso o atributo tipo,

Deve ser declarado com o mesmo nome da enumeração, indicando assim que somente valores da enumeração serão válidos.

A enumeração e seus itens podem ser acessados como variáveis estáticas,

ou seja o nome da classe que contém a enumeração, seguindo do nome do item da enumeração.

Exemplo: Cliente.TipoCliente.PESSOA_FISICA

Exemplo em código:

public class TesteClienteEnumeracao {

 

       /**

       * @param args

       */

       public static void main(String[] args) {

 

             Cliente c = new Cliente("Carlos", "carlos@gc.com.br", Cliente.TipoCliente.PESSOA_FISICA);

             System.out.println("Tipo de cliente criado = "+c.getTipo());

            

       }

 

}

Também podem ser criadas enum em seu próprio arquivo .java, quando se deseja uma melhor reutilização, como mostra abaixo.


public enum Mes {

      

       JANEIRO, FEVEREIRO, MARCO, ABRIL, MAIO, JUNHO, JULHO, AGOSTO, SETEMBRO, OUTUBRO, NOVEMBRO, DEZEMBRO

 

}

Enumerações também pode ser utilizado em instruções switch, veja o Exemplo:


public class TesteMes {

      

      

       private static boolean mesFeriasEscolares(Mes mes){

             switch (mes){

             case DEZEMBRO:

             case JANEIRO:

             case FEVEREIRO:

             case JULHO:

                    return true;

             default:

                    return false;

             }

       }

 

 

       public static void main(String[] args) {

            

             Mes mes = Mes.JANEIRO;

            

             String mensagem = (mesFeriasEscolares(mes)?" ":" não ")+ "eh mes de ferias escolares";

            

             System.out.println(mes + mensagem);

       }

      

 

}

Não precisa estanciar um objeto para enum, para chamar um atributo da classe enum deve seguir a regra de atributos estáticos Exemplo: nomeDaClasse.atributo

Veja o código:


Mes mês = Mes.JANEIRO

Obs: não utiliza a palavra reservada new; pois não está estanciando um novo objeto.

Imprimindo os elementos da enumeração.

Todas as enumerações têm um método estático values(), que retorna um array com os elementos da enumerações na mesma ordem em que foram declarados.

Desta forma se utiliza um laço for, ou mais facilmente o enhanced fopr para imprimir os elementos da enumeração.

Exemplo:

public class TesteClienteEnumeracao {

 

       public static void main(String[] args) {

 

             Cliente c = new Cliente("Carlos", "carlos@gc.com.br", Cliente.TipoCliente.PESSOA_FISICA);

             System.out.println("Tipo de cliente");

            

             for(Cliente.TipoCliente tipo : Cliente.TipoCliente.values()){

                    System.out.println(tipo);

             }

            

       }

 

}

Adicionando atributos e métodos a enumeração

public enum Periodo {

      

       DIURNO_INTEGRAL ("seg a sex", 10, 18, 3.000),

       DIURNO_MATUTINO("seg a sex", 8,12, 3.000),

       NOTURNO("seg a sex", 19,23, 3.000),

       MAIS_DIAS("sabado e domingo", 10, 19, 3.000);

      

       private String dias; // aqui vai pegar o que é String, no caso os texto entre ? ?, exemplo: ?seg a sex?.

 

                private double valor;  // aqui vai pegar o que é double(ponto flutuante) ou seja, vai pegar os 3.000.

 

       private int horaTermino; // aqui vai pegar o que é inteiro no caso ele vai seleciona o primeiro numero inteiro exemplo: 10 da constante DIURNO_INTEGRAL

 

       private int horaInicio; // aqui vai pegar o que é inteiro no caso ele vai seleciona o ultimo numero inteiro exemplo: 18 da constante DIURNO_INTEGRAL

 

      

       Periodo(String dias, int horaInicio, int horaTermino, double valor){

             this.dias = dias;

             this.horaInicio = horaInicio;

             this.horaTermino = horaTermino;

             this.valor = valor;

 

       //demais codigos

}

 

}

 

public class Turma {

      

       private String curso;

       private Periodo periodo;

      

       public Turma(String curso, Periodo periodo){

             this.setCurso(curso);

             this.setPeriodo(periodo);

       }

 

}

 

public class TesteTurma {

 

       public static void main(String[] args) {

 

             Turma t = new Turma("Curso java", Periodo.MAIS_DIAS); // selecione aqui a Constante

             System.out.println("Curso : "+t.getCurso());

             System.out.println("Dias : "+t.getPeriodo().getDias());

             System.out.println("Hora inicio : "+t.getPeriodo().getHoraInicio());

             System.out.println("Hora termino : "+t.getPeriodo().getHoraTermino());

             System.out.println("Valor : "+t.getPeriodo().getValor());

            

       }

 

}

Boa Sorte.

10 curtidas

Eu tenho que ser chato e dizer:
Não é estanciar, é instanciar (criar uma instância de e não uma estância de).

Mais do que isso, camarada, a melhor explicação sobre enum que eu já vi na vida.
Parabéns!

2 curtidas

[quote=drsmachado]Eu tenho que ser chato e dizer:
Não é estanciar, é instanciar (criar uma instância de e não uma estância de).

Mais do que isso, camarada, a melhor explicação sobre enum que eu já vi na vida.
Parabéns![/quote]

Realmente a maneira correta é instanciar, mas eu escrevi da maneira como eu falo, que é da maneira errada. kkkk. Mas isso é o de menos.

Muito boa explicação! Parabéns!

po valeu pela explicaçao cara…muito boa mesmo…

obrigado