根据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如何解决这种情况?
答案 0 :(得分:2)
是的,他们这样做。合成方法values()
的javadoc说明了它。请参阅JLS 8.9.2。
按照声明的顺序返回一个包含此枚举类型常量的数组。此方法可用于迭代常量,如下所示:
和Enum.ordinal()状态的javadoc
返回此枚举常量的序号(它在枚举声明中的位置,其中初始常量的序数为零)。
所以,如果你这样做
TestEnum.values[0]
你将永远得到
TestEnum.VALUE_A
在你的情况下。
答案 1 :(得分:1)
序号始终映射到枚举的声明顺序。但是,我会谨慎使用这样的序数。如果另一个开发人员更改了枚举声明的顺序,那么您的程序将以非常微妙的方式中断。我相信Josh Bloch在Effective Java中提到了这一点。