Об enum

Enum появились в Java, начиная с версии 1.5 . Использование enum помогает ограничить множество допустимых значений для некоторого типа данных.

Enum может быть объявлен как класс верхнего уровня (top-level класс), так и как свойство класса. В теле метода enum объявлять нельзя. После объявления enum можно ставить символ ; , но это не обязательно.

Основным компонентом enum являются константы. Их принято объявлять в верхнем регистре.

На самом деле, объявление enum представляет собой что-то вроде:

Концептуальное представление enum
enum CoffeeSize {BIG, HUGE, OVERWHELMING}
// можно представить примерно так:
class CoffeeSize {

public static final CoffeeSize BIG = new CoffeeSize(«BIG», 0);
public static final CoffeeSize HUGE = new CoffeeSize(«HUGE», 1);
public static final CoffeeSize OVERWHELMING = new CoffeeSize(«OVERWHELMING», 2);

CoffeeSize(String enumName, int index) { // stuff here }

public static void main(String[] args) {
System.out.println(CoffeeSize.BIG);
}

}

Каждая константа (объявленная как public static final) в перечислении — это экземпляр типа, которым задан enum. Также у каждой константы есть индекс, то есть порядок, в котором они перечислены, имеет значение. Можно полагать enum как массив элементов типа, которым задан enum. У каждого enum есть статический метод values, который возвращает массив констант в том порядке, в котором они определены в enum.

В enum можно добавлять конструкторы, свойства, методы и так называемый constant specific class body . Конструктор enum не может быть вызван напрямую, он вызывается автоматически, аргументы задаются в скобках после значения константы. Можно задавать более одного аргумента в конструкторе, можно перегружать конструкторы, как в обычном классе. Enum может реализовывать один или несколько интерфейсов, но не может расширять другие классы (extends для enum недопустим). Также никакие другие классы не могут расширять Enum, так как все объявляемые в Enum конструкторы имеют модификатор private (если объявить в Enum конструктор без модификатора доступа, то конструктор будет скомпилирован как private). Также enum не может быть объявлен с модификатором final.

Constant specific class body нужен тогда, когда для одного или нескольких элементов enum нужно перезаписать значение, возвращаемое методом, объявленным в enum. См пример ниже:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *