В Java enum
является полноценным классом :
Типы перечислений языка программирования Java
гораздо мощнее, чем их
аналоги на других языках.
Объявление enum определяет класс
(называется типом enum). Enum класс
Тело может включать в себя методы и другие
поля.
Чтобы увидеть фактический размер каждого enum
, давайте создадим фактический enum
и изучим содержимое создаваемого им файла class
.
Допустим, у нас есть следующий Constants
enum class:
public enum Constants {
ONE,
TWO,
THREE;
}
Компиляция вышеупомянутого enum
и дизассемблирование результирующего файла class
с javap
дает следующее:
Compiled from "Constants.java"
public final class Constants extends java.lang.Enum{
public static final Constants ONE;
public static final Constants TWO;
public static final Constants THREE;
public static Constants[] values();
public static Constants valueOf(java.lang.String);
static {};
}
Разборка показывает, что каждое поле enum
является экземпляром класса Constants
enum
. (Дальнейший анализ с javap
покажет, что каждое поле инициализируется путем создания нового объекта путем вызова конструктора new Constants(String)
в блоке статической инициализации.)
Следовательно, мы можем сказать, что каждое поле enum
, которое мы создаем, будет, по крайней мере, равно затратам на создание объекта в JVM.