Skip to content
This repository was archived by the owner on Jan 14, 2024. It is now read-only.

Latest commit

 

History

History
100 lines (77 loc) · 2.98 KB

Enumeradores.md

File metadata and controls

100 lines (77 loc) · 2.98 KB

Enumeradores

Enums são listas de constantes. Quando você precisar de uma lista com valores pré-definidos que representam algum dado, deve ser usado enum.
No Java, constantes são declaradas com a palavra-chave final. Isso significa que a atribuição feita é imutável. Portanto, é possível fazer modelagens usando atributos estáticos e constantes. No exemplo a seguir, modelamos o estado de uma tomada.

class Tomada {
  // Atributos estáticos podem ser acessados sem precisar instanciar a classe.
  final static boolean ON = true;
  final static boolean OFF = false;
}

Obs.: É padrão usar caixa alta para declarar constantes.

Outra forma de abordar a mesma representação é modelar usando enum. Só que o enum, por ter sido criado para esse casos, é uma solução mais adequada e legível.

enum Tomada {
  // (1) Define as possíveis constantes e seus respectivos valores
  ON(true), OFF(false);

  // (2) Valor que vai ser atribuído a constante
  private boolean ligado;

  // (3) Construtor padrão que vai ser chamado automaticamente na instanciação.
  Tomada(boolean ligado) {
    this.ligado = ligado;
  }

  // (4) Método que retorna o valor associado a constante
  public boolean isLigado() {
    return ligado;
  }
}

Métodos values e valueOf

Método values()

O método Enum.values() retorna um vetor com os valores do enum, e é utilizado quando se deseja saber todos os seus valores.
Exemplo de iteração sobre os valores do enum usando um for loop;

// Mostra os valores do enum:
// ON
// OFF
  for (Tomada tomada : Tomada.values()) {
      System.out.println(tomada);
  }

Método valueOf()

A classe Enum possuí o método Enum.valueOf() que permite obter uma instância de um enum através de uma String. Ou seja, permite avaliar um valor de uma String e tranforma-la numa instância do enum.

// Instância do enum Tomada
Tomada tomada = Enum.valueOf(Tomada.class, "OFF");

// Mostra o valor do enum, no caso de "OFF" vai ser:
// false
System.out.println(tomada.isLigado());

Métodos Abstratos

Podemos utilizar métodos abstratos através de uma interface ou podemos declarar dentro do enum.

enum TipoDocumento {

  CPF {
    // Implementação obrigatória do método
    @Override
    public String geraNumeroTeste() {
      return GeraCpfCnpj.cpf();
    }
  },
  CNPJ {
    // Implementação obrigatória do método
    @Override
    public String geraNumeroTeste() {
      return GeraCpfCnpj.cnpj();
    }
  };

  // Criação do método abstrato
  public abstract String geraNumeroTeste();
}

Informações importantes

  • Enums extendem implicitamente a classe java.lang.Enum, e por isso não podem extender nenhuma outra classe. Isso se dá devido a linguagem não ter suporte para herança múltipla.
  • Podem ser comparados usando o operador ==
  • Não podem ser instaciados com new
  • Podem implementar interfaces
  • Podem ser declarados sepearadamente ou dentro de uma classe