Atualizado: 16/08/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Enum em Java

Além dos tipos primitivos e das classes, o Java possui um tipo especial chamado enum (enumeration). Um enum representa um conjunto de constantes nomeadas logicamente relacionadas.

A declaração de um enum é feita com a palavra-chave enum, seguida do nome e da lista de constantes separadas por vírgulas.

enum Day {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
}

Um enum define um novo tipo. É possível criar variáveis desse tipo e atribuir valores que estejam entre as constantes declaradas:

public class Program {
    public static void main(String[] args) {
        Day current = Day.MONDAY;
        System.out.println(current); // MONDAY
    }
}

Uso em Classes

enum pode ser usado como tipo de campo em uma classe:

public class Program {
    public static void main(String[] args) {
        Book b1 = new Book("War and Peace", "L. Tolstoy", Type.BELLETRISTIC);
        System.out.printf("Book '%s' has a type %s%n", b1.name, b1.getType());
    }
}

class Book {
    private Type bookType;
    String name;
    String author;

    Book(String name, String author, Type type) {
        this.bookType = type;
        this.name = name;
        this.author = author;
    }

    String getType() {
        switch (bookType) {
            case BELLETRISTIC: return "Belletristic";
            case SCIENCE: return "Science";
            case SCIENCE_FICTION: return "Science fiction";
            case PHANTASY: return "Phantasy";
            default: return "Undefined";
        }
    }
}

enum Type {
    SCIENCE,
    BELLETRISTIC,
    PHANTASY,
    SCIENCE_FICTION
}

No exemplo, o enum Type contém quatro gêneros de livros. A classe Book possui um campo bookType do tipo Type. O método getType() usa switch para retornar a descrição correspondente.


Métodos de enum

Todo enum herda automaticamente métodos da classe java.lang.Enum. Os mais usados são:

  • values() → retorna um array com todas as constantes.
  • ordinal() → retorna a posição da constante na lista (índice inicia em 0).
public class Program {
    public static void main(String[] args) {
        // Listar todas as constantes
        for (Type t : Type.values()) {
            System.out.println(t);
        }

        // Posição da constante
        System.out.println(Type.BELLETRISTIC.ordinal()); // 1
    }
}

Construtores, Campos e Métodos

Um enum pode ter construtores, campos e métodos, assim como uma classe. O construtor de um enum é sempre privado (implícito ou explícito).

public class Program {
    public static void main(String[] args) {
        System.out.println(Color.RED.getCode());   // #FF0000
        System.out.println(Color.GREEN.getCode()); // #00FF00
    }
}

enum Color {
    RED("#FF0000"), BLUE("#0000FF"), GREEN("#00FF00");

    private String code;

    Color(String code) {
        this.code = code;
    }

    public String getCode() {
        return code;
    }
}

Métodos Específicos para Constantes

Cada constante de um enum pode sobrescrever métodos individualmente.

public class Program {
    public static void main(String[] args) {
        Operation op = Operation.SUM;
        System.out.println(op.action(10, 4)); // 14

        op = Operation.MULTIPLY;
        System.out.println(op.action(6, 4)); // 24
    }
}

enum Operation {
    SUM {
        public int action(int x, int y) { return x + y; }
    },
    SUBTRACT {
        public int action(int x, int y) { return x - y; }
    },
    MULTIPLY {
        public int action(int x, int y) { return x * y; }
    };

    public abstract int action(int x, int y);
}

ℹ️ Dica: Essa técnica é útil quando cada constante precisa de um comportamento diferente para o mesmo método.

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com