Еще одним типом данных является enum (enumerated). Поле типа enum предполагает, что величина декларирована при определении. Каждое определение дает новый тип. Только нумерованные элементы того же типа могут присваиваться и сравниваться. Каждому нумерованному элементу должно быть присвоено значение, как это показано в следующем примере. Так как нумерованные элементы неупорядочены, им может быть присвоено любое уникальное значение в любом порядке.
enum { e1(v1), e2(v2), ... , en(vn) [[, (n)]] } Te;
Нумерованные элементы занимают в байтовом потоке столько места, сколько требует максимальное определенное порядковое значение. Следующее определение требует использования одного байта для поля типа Color (цвет).
enum { red(3), blue(5), white(7) } Color;
Можно опционно специфицировать значение без ассоциированной с ним метки, чтобы задать ширину без определения избыточного элемента. В следующем примере, Taste в потоке данных занимает два байта, но может предполагать значения 1, 2 или 4.
enum { sweet(1), sour(2), bitter(4), (32000) } Taste;
Имена элементов нумерации собраны в пределах определенного типа. В первом примере, полная ссылка на второй элемент будет выглядеть как Color.blue. Такое описание не требуется, если объект присвоения (target) хорошо специфицирован.
| Color color = Color.blue; | /* чрезмерная спецификация, допустимо */ |
| Color color = blue; | /* правильно, тип задан неявно */ |
Для нумерованных элементов, которые не преобразуются во внешнее представление, цифровая информация может быть опущена.
enum { low, medium, high } Amount;