Pascal4eg / Java

 Java | Фишки и трюки

Методы и конструкторы в enum

Перечисления (enum) — это классы Java, определяющие наборы констант. Самый простой enum выглядит так:

public enum Vehicle { CAR, BUS, BICYCLE, SCOOTER }

Но на самом деле, enum в Java обладают гораздо более широким функционалом. Они поддерживают поля, методы, интерфейсы и т.д. Они также Comparable и Serializable и могут имплементировать все методы объекта.

Для наглядности давайте создадим enum Animal и присвоим каждому элементу цвет:

public enum Animal {
    DOG("black"),
    CAT("white"),
    RAT("gray");

    private final String color;
    Animal(String color) {
        this.color = color;
    }
    
    public String getColor() {
        return color;
    }
}

Теперь мы можем выполнить перебор элементов массива с помощью статического метода values():

public class Main {
    public static void main(String[] args) {
        for (Animal a : Animal.values()) {
            System.out.println(a.name() + " - " + a.getColor());
        }
    }
}

Мы получим следующий результат:
DOG - black
CAT - white
RAT - gray

Каждой константе можно присвоить разное поведение при выполнении определенного метода. Например, можно сделать основной метод абстрактным и переопределить его в каждой константе:

public enum Operation {
    PLUS { 
        double evaluate(double x, double y) { 
            return x + y; 
        } 
    },
    
    MINUS { 
        double evaluate(double x, double y) { 
            return x - y; 
        } 
    },
    abstract double evaluate(double x, double y);
}

Всё это обеспечивает удобную работу с перечислениями в Java.