読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

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()」とかあるな。