Enumって順番があるのか。
Enumには定義順に連番が振られていて、EnumSet#rangeを使って開始位置、終了位置を指定してその範囲のEnumを取り出すことができたりします。
// テスト用の列挙型 enum Test { A, B, C, D, E, F, G, H } public static void main( String[] args ) { // 列挙型「Test」の C から G を取得。 System.out.println( "\n--- C から G" ); EnumSet<Test> range = EnumSet.range( Test.C, Test.G ); for ( Test t : range ) { System.out.println( t ); } // 列挙型「Test」の C から C を取得。開始位置/終了位置とも一覧に含まれる。 System.out.println( "\n--- C から C" ); range = EnumSet.range( Test.C, Test.C ); for ( Test t : range ) { System.out.println( t ); } // 範囲が不正 → IllegalArgumentExceptionになる。 System.out.println( "\n--- C から A" ); range = EnumSet.range( Test.C, Test.A ); for ( Test t : range ) { System.out.println( t ); } }
実行結果です。
--- C から G C D E F G --- C から C C --- C から A Exception in thread "main" java.lang.IllegalArgumentException: C > A ...
よく見ると「Enum#ordinal()」とかあるな。