0

根据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;

现在,我的问题是:如果你有一个枚举,例如: 00 是否总是映射到 VALUE_A,而 01 总是映射到 VALUE_B,因为它们是按那个(升序?)顺序写的?我可以指望这种情况总是如此吗?枚举在 Java 中以什么方式被重视,Preon 是如何解决这种情况的?
public static enum TestEnum {
VALUE_A, VALUE_B
}

4

2 回答 2

2

是的,他们这样做。合成方法的 javadocvalues()说明了这一点。见JLS 8.9.2

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

Enum.ordinal()状态的 javadoc

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

所以如果你这样做

TestEnum.values[0]

你总会得到

TestEnum.VALUE_A

在你的情况下。

于 2013-12-19T14:49:00.697 回答
1

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

于 2013-12-19T15:00:27.010 回答