Enum _SOME_ENUM
_があります:
_public enum SOME_ENUM {
EN_ONE,
EN_TWO,
EN_THREE;
}
_
SOME_ENUM.values()
は常に列挙型宣言の順に列挙型を返します:_EN_ONE, EN_TWO, EN_THREE
_?それはルールですか、それとも次のJDKリリースで変更されないことが保証されていませんか?
Java言語仕様はこの明示的な言語を使用します:
@この列挙型の定数を含む配列を宣言された順序で返します [ソース]
そのため、はい、それらは宣言順に返されます。誰かがクラスを変更すると、時間の経過とともに順序が変わる可能性があるため、これをどのように使用するかに非常に注意してください。
はい、それらをこの順序で返すことが保証されています。
ただし、たとえば、新しいアイテムを挿入した後に変更される可能性があるため、この値とordinal()
値に依存することは避けてください。
値が宣言されている順序によって決まります。ただし、あなた(または他の誰か)が将来値を並べ替え/挿入/削除しないという保証はありません。したがって、順序に依存しないでください。
Effective Java 2nd。EditionはItem 31を密接に関連するトピックに捧げます:序数の代わりにインスタンスフィールドを使用:
順序から列挙型に関連付けられた値を導出しないでください。代わりにインスタンスフィールドに保存します。
他の答えは良いですが、これについてコメントしないでください:
「それはルールですか、それとも次のJdkリリースで変更されないことが保証されていませんか?」
将来のJDKに保証があるとは思わないので、心配する必要もありません。それらを強制する方法はありません。将来のJDKリードは、そのような保証を放棄することを決定するかもしれません。ウェストミンスターの議会制度のようなものです。「議会は将来の議会を縛ることはできません。」
そうは言っても、JDKの歴史は優れた一貫性を明らかにしています。それらは多くの重大な変更を加えないので、現在の指定(観察されただけでなく)の動作が保持されると確信できます。