【问题标题】:Preon enum interpretation and mappingPreon 枚举解释和映射
【发布时间】:2013-12-19 14:47:51
【问题描述】:

根据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 是如何解决这种情况的?

【问题讨论】:

  • 请注意,@BoundEnumOption(value=X) 是描述类所必需的,并且需要在字节本身内考虑字节顺序。

标签: java map enums preon


【解决方案1】:

是的。合成方法values() 的javadoc 说明了这一点。见JLS 8.9.2

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

以及Enum.ordinal() 状态的 javadoc

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

如果你这样做了

TestEnum.values[0]

你总会得到

TestEnum.VALUE_A

在你的情况下。

【讨论】:

  • 所以序数总是从 0 开始并增加这样: VALUE_0 "=0", VALUE_1 ="1", ..., VALUE_N ="N" 这个规则没有例外吗?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多