quarta-feira, 3 de setembro de 2008

Novidades do Java 5.0: Enums

Hoje iremos aprender mais um assunto novo para a prova de certificação java 5.0: os enums. Podemos entender enums como tipos de constantes. Por exemplo: SEGUNDA, TERCA, QUARTA...etc, podem ser iplementados como constantes ou membros de um enum chamado DiasDaSemana. Enums ajudam bastante os programadores a tornar seus códigos mais claros e com menos possibilidades de bugs.
Para definir um enum usamos a palavra chave enum, por exemplo, o nosso enum descrito acima ficaria assim:

public enum DiasDaSemana {
DOMINGO, SEGUNDA, TERCA, QUARTA, QUINTA,
SEXTA, SABADO
}


Um enum pode ser declarado em uma classe própria ou ainda dentro de uma classe. Vejamos como é isso:

enum DiasDaSemana {
DOMINGO, SEGUNDA, TERCA, QUARTA, QUINTA,
SEXTA, SABADO
}

class Calendario {
enum Meses {
JANEIRO, FEVEREIRO, MARCO
//OUTROS MESES AQUI
}
DiasDaSemana dia;
Meses mes;
}

public class UsandoCalendario {

public static void main(String... args){
Calendario c = new Calendario();
c.dia = DiasDaSemana.SEGUNDA;
c.mes = Calendario.Meses.JANEIRO;
}
}

Apesar de enum ser um classe (é isso mesmo) um enum não é instanciado diretamente como as outras classes em java (usando new por exemplo), basta chamar uma de suas 'constantes'. A ordem dos elementos de um enum é importante e uma coisa importante também é que nada pode ser declarado antes delas. Bom, você pode declarar variáveis em um enum, mas elas precisam vir após a declaração dos elementos. Por exemplo:

enum DiasDaSemana {
private boolean diaUtil; // erro!
DOMINGO, SEGUNDA, TERCA, QUARTA, QUINTA,
SEXTA, SABADO
}

O correto seria:

enum DiasDaSemana {
DOMINGO, SEGUNDA, TERCA, QUARTA, QUINTA,
SEXTA, SABADO; // o ; é obrigatório caso declare algo depois

private boolean diaUtil;
}


Enums também pode ter construtores. Porém eles não são acessíveis fora da definição do enum. Podemos usar os construtores para inicializar algum tipo de variável ou valor default para um enum. Por exemplo:

enum DiasDaSemana {
DOMINGO(false), SEGUNDA(true), TERCA(true), QUARTA(true), QUINTA(true), SEXTA(true), SABADO(false);
// o ; é obrigatório caso declare algo depois

private boolean diaUtil;

DiasDaSemana(boolean util){
this.diaUtil = util;
}

public boolean isDiaUtil(){
return this.diaUtil;
}

Enums também pode ser utilizados com a estrutura de switch. Como no exemplo abaixo:

public enum Luas {
CHEIA, CRESCENTE, MINGUANTE, NOVA
}

.... definição da classe
Luas l = Luas.NOVA;
switch(l) {
case CHEIA: //codigo aqui
case CRESCENTE: //codigo aqui
case MINGUANTE: //codigo aqui
case NOVA: //codigo aqui
default: //codigo aqui
}

Até o próximo post.

Um comentário:

  1. Cara, vc acha que dá pra estudar pra certificação, trabalhar, estudar outras coisas e mesmo assim, fazer a prova e passar bem?

    Isso tudo pra uma pessoa sem ser superdotada rsrsrs.

    ResponderExcluir