Preon enum解释和映射

时间:2013-12-19 14:47:51

标签: java map enums preon

根据http://www.scribd.com/doc/8128172/Preon-Introduction, Preon可用于将位解码为枚举表示:

// 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如何解决这种情况?

2 个答案:

答案 0 :(得分:2)

是的,他们这样做。合成方法values()的javadoc说明了它。请参阅JLS 8.9.2

  

按照声明的顺序返回一个包含此枚举类型常量的数组。此方法可用于迭代常量,如下所示:

Enum.ordinal()状态的javadoc

  

返回此枚举常量的序号(它在枚举声明中的位置,其中初始常量的序数为零)。

所以,如果你这样做

TestEnum.values[0]

你将永远得到

TestEnum.VALUE_A

在你的情况下。

答案 1 :(得分:1)

序号始终映射到枚举的声明顺序。但是,我会谨慎使用这样的序数。如果另一个开发人员更改了枚举声明的顺序,那么您的程序将以非常微妙的方式中断。我相信Josh Bloch在Effective Java中提到了这一点。