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

はい、彼らがやります。合成メソッドの javadoc はそれをvalues()述べています。JLS 8.9.2を参照してください。

この列挙型の定数を含む配列を、宣言されている順序で返します。このメソッドは、次のように定数を反復処理するために使用できます。

およびEnum.ordinal()状態の javadoc

この列挙定数の序数を返します (初期定数に序数ゼロが割り当てられている列挙型宣言内の位置)。

だからあなたがするなら

TestEnum.values[0]

あなたはいつも得るでしょう

TestEnum.VALUE_A

あなたの場合。

于 2013-12-19T14:49:00.697 に答える
1

序数は常に列挙型の宣言された順序にマップされます。ただし、そのような序数を使用することには注意が必要です。別の開発者が enum 宣言の順序を変更すると、プログラムは非常に微妙な方法で壊れます。Josh Bloch は、Effective Java でこれについて言及していると思います。

于 2013-12-19T15:00:27.010 に答える