quinta-feira, agosto 16, 2007

Java Enum

Aeeee o blog está vivo! Eu andei sem tempo para postar aqui mas vamos lá...

A bola da vez é o tipo Enum do Java.
Uma enum (enumeração) é um conjunto de valores fixos (constantes) que podem ajudar o desenvolvedor a definir valores fixos que serão usados no sistema.

Use sempre que você quiser definir um conjunto de valores fixo como por exemplo os dias da semana, meses do ano, tipos de entidades, etc...

Vamos ao exemplo usando uma enum que armazene os dias da semana:

public enum DiasSemana {

    SEGUNDA, TERCA, QUARTA, QUINTA, SEXTA, SABADO, DOMINGO;

}

Ok, o exemplo é bem meia boca, mas vamos em frente. Por serem constantes os valores de uma enum são sempre grafados em maiúsculo.

Agora vamos fazer uma classe que utilize esses valores:

public class Agenda {
    public static void main(String[] args) {
    
        System.out.println(DiasSemana.QUINTA);
    
    }
}

A saída é: QUINTA.

Enums podem ter métodos, seus valores podem ter métodos, e toda enum “herda” métodos (nos materiais da SUN eles falam que o compilador adiciona tais métodos, não fala em herança propriamente dita e na documentação da classe o objeto Enum é filho de Object. Todas as enums que você criar serão filhas da classe java.lang.Enum e por não haver herança múltipla no Java você não pode fazer suas enums estenderem mais nada!) que facilitam a vida do desenvolvedor como o estático values() que retorna um array com os valores da enum ordenados pela declaração. Ex:

public class Agenda {
    public static void main(String[] args) {

        for(DiasSemana dia : DiasSemana.values()) {
            System.out.println(dia);
        }

    }
}

A saída é:

SEGUNDA
TERCA
QUARTA
QUINTA
SEXTA
SABADO
DOMINGO

Bem mas a nossa enum não está muito funcional, eu não exibiria em meu sistema essas entradas! ;)
Então vamos declarar métodos que formatem nossos valores para algo melhor:

public enum DiasSemana {

    SEGUNDA() {
        public String extenso() {
            return "segunda-feira";
        }
    },
    TERCA() {
        public String extenso() {
            return "terça-feira";
        }
    },
    QUARTA() {
        public String extenso() {
            return "quarta-feira";
        }
    },
    QUINTA() {
        public String extenso() {
            return "quinta-feira";
        }
    },
    SEXTA() {
        public String extenso() {
            return "sexta-feira";
        }
    },
    SABADO() {
        public String extenso() {
            return "sábado";
        }
    },
    DOMINGO() {
        public String extenso() {
            return "domingo";
        }
    };
    
    public String extenso() {
        return this.extenso();
    }
}

Vamos usar o recurso:

public class Agenda {
    public static void main(String[] args) {

        for(DiasSemana dia : DiasSemana.values()) {
            System.out.println(dia.extenso());
        }

    }
}

A saída é:

segunda-feira
terça-feira
quarta-feira
quinta-feira
sexta-feira
sábado
domingo

Beleza! Com isso foi ilustrado o fato de um tipo Enum poder ter métodos e seus atributos também.

Ainda brincando com a classe Agenda:

public class Agenda {
    public static void main(String[] args) {

        for(DiasSemana dia : DiasSemana.values()) {
            System.out.println("Valor: " + dia);
            System.out.println("Extenso: " + dia.extenso() + "\n");
        }

    }
}

A saída é:

Valor: SEGUNDA
Extenso: segunda-feira

Valor: TERCA
Extenso: terça-feira

Valor: QUARTA
Extenso: quarta-feira

Valor: QUINTA
Extenso: quinta-feira

Valor: SEXTA
Extenso: sexta-feira

Valor: SABADO
Extenso: sábado

Valor: DOMINGO
Extenso: domingo

Bom galera, foi uma passadinha rápida por aqui para postar algo. Até mais, obrigado pela visita, click nos patrocinadores :) e comentários.

5 comentários:

Leo disse...

Bem interessante, mas não entendi P. nenhuma, hehe.
Temos que marcar de bater um papo ao vivo. Abs

Anônimo disse...

E ai beleza?
Muito boa sua matéria.
Tem como eu adiconar um mapa dentro de um enum onde o a chave seja uma string e o value seja o enum?
Valeu

Andre F. disse...

Opa cara, beleza?
Muito bom seu blog. Acredito que tenha mais uma maneira de ser feito.
Em vez de existir um método para cada membro no ENUM, você poderia ter feito assim:

SEGUNDA("Segunda-feira"), ...
e uma variável String dia;

Aí um construtor:

DiasSemana(String dia)
{
// Acho que passa os parâmetros que já existe nos objetos do ENUM
this.dia = dia;
}

Então, você faz um método toString() e retorna o dia por extenso.

public String toString()
{ return dia; }

Hehe. Acredito que dê certo também.
Abraço e parabéns.

Anônimo disse...

muito bom cara!
Parabens,

este artigo me ajudou bastante era o que estava procurando

vlw

Jean Michel disse...

Que bom que ajudou.

Grato pela visita e pelo comentário.