列挙型がありSOME_ENUM
ます:
public enum SOME_ENUM {
EN_ONE,
EN_TWO,
EN_THREE;
}
ウィルSOME_ENUM.values()
常にenum宣言の順に列挙型を返しますか
EN_ONE, EN_TWO, EN_THREE
?それはルールですか、それとも次のJDKリリースで変更されないことが保証されていませんか?
列挙型がありSOME_ENUM
ます:
public enum SOME_ENUM {
EN_ONE,
EN_TWO,
EN_THREE;
}
ウィルSOME_ENUM.values()
常にenum宣言の順に列挙型を返しますか
EN_ONE, EN_TWO, EN_THREE
?それはルールですか、それとも次のJDKリリースで変更されないことが保証されていませんか?
回答:
Java言語仕様では、次の明示的な言語を使用しています。
この列挙型の定数を含む配列を、宣言された順序で返します[ソース]
そのため、はい、それらは宣言順に返されます。誰かがクラスを変更すると、時間の経過とともに順序が変わる可能性があるので、これを使用する方法には十分注意してください。
これは、値が宣言された順序によって決定されます。ただし、ユーザー(または他の誰か)が将来、値を並べ替え/挿入/削除しないという保証はありません。したがって、注文に依存するべきではありません。
効果的なJava 2番目。エディションは、アイテム31を密接に関連するトピックに特化しています。序数の代わりにインスタンスフィールドを使用してください:
序数から列挙型に関連付けられた値を派生させないでください。代わりにインスタンスフィールドに保存してください。
enum
は意図されていない何らかの目的で使用しようとしているように聞こえます。
他の答えは良いですが、これについてコメントしないでください:
「ルールですか、それとも次のJdkリリースで変更されないことが保証されていませんか?」
将来のJDKに保証があるとは思わないので、心配する必要はありません。それらを強制する方法はないでしょう。将来のJDKリードは、そのような保証を放棄することを決定するかもしれません。それはウェストミンスターの議会制度に似ています。「どの議会も将来の議会を拘束することはできません」。
そうは言っても、JDKの歴史は優れた一貫性を示しています。それらは多くの重大な変更を加えないので、現在の指定された(観察されただけでなく)動作が保持されることを確信できます。