Ответ
Enums в Kotlin (и Java) представляются как классы, где каждая константа — это экземпляр этого класса. В памяти это реализовано через статический массив $VALUES, содержащий все константы enum.
enum class Direction {
NORTH, SOUTH, EAST, WEST
}
В байт-коде это преобразуется примерно в:
public final class Direction extends Enum {
public static final Direction NORTH = new Direction("NORTH", 0);
public static final Direction SOUTH = new Direction("SOUTH", 1);
//... остальные константы
private static final Direction[] $VALUES = new Direction[]{NORTH, SOUTH, EAST, WEST};
}
Особенности:
- Каждая константа — синглтон (единственный экземпляр)
- Enum занимает больше памяти, чем обычные константы, из-за overhead класса
- Доступ к значениям через
ordinal()(порядковый номер) иname(имя строкой)