2013-12-19 5 views
0

Согласно http://www.scribd.com/doc/8128172/Preon-Introduction, преонным могут быть использованы для декодирования бит в представление перечислений как таковые:преонной интерпретация перечисления и отображение

// Reads a bit from the buffer, and interprets it as an enum value,
// interpreting the number as its ordinal value.
@BoundNumber(size="2")
Type type;

Теперь мой вопрос: если у вас есть перечисление таких, как:
public static enum TestEnum {
VALUE_A, VALUE_B
}

Всегда ли 00 всегда соответствует VALUE_A и 01 всегда VALUE_B, потому что они записаны в этом (по возрастанию?) Порядке? Могу ли я рассчитывать на то, что это всегда так? Каким образом перечислены перечисления на Java и как Preon разрешает эту ситуацию?

+0

Пожалуйста, не нужно, чтобы @BoundEnumOption (значение = X) требовался для описывающего класса и что порядок байтов должен учитываться в самом байте. – JohnyTex

ответ

2

Да, они делают. Об этом говорится в javadoc синтетического метода values(). См. JLS 8.9.2.

Возвращает массив, содержащий константы этого типа перечисления, в том порядке, в котором они объявлены. Этот метод может быть использован для перебора констант следующим образом:

и Javadoc для Enum.ordinal() состояний

Возвращает порядковый номер этой константы перечисления (его положения в своей перечислимой декларации, где начальные постоянная присваивается порядковый номер нуля).

Так что, если вы

TestEnum.values[0] 

вы всегда получите

TestEnum.VALUE_A 

в вашем случае.

+0

Так порядковое всегда начинается с 0 и увеличить таким образом, что: VALUE_0 "= 0", VALUE_1 = "1", ..., VALUE_N = "N" Там не исключение из этого правила? – JohnyTex

1

Ординал всегда сопоставляется объявленному порядку перечислений. Тем не менее, я бы опасался когда-либо использовать этот ординал. Если другой разработчик изменит порядок деклараций перечисления, ваша программа сломается очень тонко. Я считаю, что Джош Блох упоминает об этом в «Эффективной Java».

Смежные вопросы