quarta-feira, 21 de julho de 2010

[Java] Criar e usar tipos enumerados


Uma enumeração é um tipo especial de classe que é introduzida pela palavra-chave enum e um nome de tipo. Assim como todas as classes as chaves { e } delimitam o corpo da declaração enum. Entre as chaves contém uma lista de constantes de enumeração separadas por vírgulas. Cada identificador em uma enum devem ser únicos.

Como todas as classes, os tipos enum são tipos por referência. Uma declaração do tipo enum pode opcionalmente incluir construtores, campos e métodos.Características da classe enum:
  1. Tipos enum são implicidamente final.
  2. Constantes enum são implicidamente static.
  3. Se tentar criar um objeto de um tipo enum irá resultar em erro de compilação.

Usar tipos enumerados

Segue abaixo exemplo de declaração e utilização de classe enum. Verifique que no exemplo a classe enum possui campo, construtor e método.
//Classe enum Naipe
public enum Naipe {
ESPADAS ("Espadas"),
COPAS ("Copas"),
PAUS ("Paus"),
OUROS ("Ouros");

// Campo
private final String nome;

// Construtor
private Naipe (String nome) {
this.nome = nome;
}

// Método
public String getNome() {
return nome;
}
}

// Classe Baralho
public class Baralho {
private Naipe naipe;
private int valor;

public Baralho(Naipe n, int v) {...}


public Naipe getNaipe() {...}
public int getValor() {...}


public String getNomeNaipe() {...}
}

// Classe TestaBaralho
public class TestaBaralho {
public static void main(String[] args) {

Baralho carta1 = new Baralho(Naipe.ESPADAS, 2);
System.out.println("A carta1 é um " + carta1.getValor()
+ " de " + carta1.getNaipe().getNome());

// Isto não compilará.
// Baralho carta2 = new Baralho(47, 2);
}
}


2 comentários:

  1. Gostei do teu blog, está organizado e trata tópicos variados obre Java. Me ajudou a entender melhor os tipos enum, mas continuo com uma dúvida. Não sei se podes me ajudar. De qualquer forma só um maneira de saber, perguntando. Podemos utilizar um enum como atributo em outra classe?
    Exemplo:
    private enum algo;
    ou
    private Enum algo2;
    ou
    não é possível?
    Obrigado.

    ResponderExcluir
  2. Desculpa a demora, estava com foco em outros concursos, mas antes tarde do que nunca. Alguma outra pessoa pode ter esta mesma dúvida.

    Veja o exemplo abaixo:

    public class jogo {
    private enum Status { CONTINUE, PERDEU, GANHOU }
    public void jogar () {
    int minhaPontuacao = 0;
    Status statusDoJogo;
    (...)
    }

    a variável local statusDoJogo é declarada como do tipo Status. Este tipo é um membro private de Jogo, pois somente será utilizado nesta classe. Status foi declarado como do tipo Enum.

    Com isto acho que respondo a pergunta. Não tem como diretamente criar uma variável local com o tipo enum, porém você pode declarar um tipo novo com as constantes que você precisa e utilizar este novo tipo em sua variável local.

    ResponderExcluir