ordinal から enum オブジェクトを取得する

enumのordinal値はenum定数を宣言した順番に0から順に値が振られますが、nameのようにvalueOf()で一発で復元、ということはできません。

えぇ!?

enum宣言とテストコードを含むのでちょっと長めですが、復元しているところはわずか4行です。

    public static Payment findPayment( int ordinal) {
        for( Payment elem : EnumSet.allOf( Payment.class)) {
            if( elem.ordinal() == ordinal) return elem;
        }
        return null;
    }

わざわざそんな面倒な・・・。1行で書けるのに・・・

    public static Payment findPayment(int ordinal) {
        return Payment.values()[oridnal];
    }

まぁ、ordinal として不適切な値を指定されたときに ArrayIndexOutOfBoundException が投げられるんですが。
それがいやなら

    public static Payment findPayment(int ordinal) {
        if (ordinal < 0 || ordinal > Payment.values().length >= ordinal) {
             throw new IllegalArgumentException();
             // return null
        }
        return Payment.values()[ordinal];
    }

かな。enum の値が null で嬉しいことって多分あんまりないので、null を返すよりきっちり例外投げておいたほうがいいだろう。下手に null を返して問題になったら問題の箇所を探すのに手間取るだろうし。
関係ないけど、括弧の前後のスペーシングが独特ですね。> id:t_yano さん。