enum拡張
Javaのenumを拡張して、何らかの値を持たせることはよくあると思う。特にDBに格納するコードとenumを対応付けたくなる。
そういう場合は、コンストラクタに引数を持たせて初期化する。
Fruits.java
enum Fruits implements CodeEnum { Apple(1), Orange(2), None(99); private int code; private Fruits(int code) { this.code = code; } }
コード格納用インターフェース
コードとenumを変換する手順はインターフェースに持たせておいて、具体的なenum型ではこれを利用することにする。CodeEnum.java
interface CodeEnum { int getCode(); public staticFruits.javaT valueOf(T[] values, int code) { for (T v : values) { if (v.getCode() == code) return v; } throw new IllegalArgumentException("No enum constant " + code); } }
enum Fruits implements CodeEnum { Apple(1), Orange(2), None(99); private Fruits(int code) { this.code = code; } private int code; @Override public int getCode() { return code; } public static Fruits valueOf(int code) { return CodeEnum.valueOf(Fruits.values(), code); } }
Fruits.Apple.getCode(); // 1 Fruits.None.getCode(); // 99 Fruits.valueOf(2); // Orange Fruits.valueOf(99); // None
こうしておけば、特定のORマッピングツールなどに依存せずに、enumの定義だけでJavaのコードと外部コード定義の橋渡しができる。
0 件のコメント:
コメントを投稿