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 さん。