トップ «前の日記(2009-07-15) 最新 次の日記(2009-07-17)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2009-07-16

_ enum

Javaでenum値をDBに格納するときに、intへ変換する。
public enum Encho {
    Hee(1),
    Huu(2),
    Hoo(3);
    private final int value;
    Encho(int n) {
        value = n;
    }
    public int value() {
        return value;
    }
}
...
statement.setInt(1, Encho.Huu.value()); 
で、ここまでは良いのだが、逆ができなくてしばらく悩む。
Encho e = (Encho)rs.getInt(1); // => error
そこでしょうがなく、自前変換メソッドを作ったが、本当にこんな方法しかないのかなぁ。
public enum Encho {
    Hee(1),
    Huu(2),
    Hoo(3);
    private final int value;
    Encho(int n) {
        value = n;
    }
    public int value() {
        return value;
    }
    public static Encho valueOf(int n) {
        for (Encho e : values()) {
            if (e.value == n) {
                return e;
            }
         }
         throw new IllegalArgumentException(n + " is not Encho");
    }
}
...
Encho e = Encho.valueOf(rs.getInt(1)); 
本日のツッコミ(全3件) [ツッコミを入れる]
_ arn (2009-07-16 22:50)

あまり知られていないですが、<br>Enum -> int: hogeEnum.ordinal()<br>int -> Enum: HogeEnum.class.getEnumConstants()[value]<br>という方法があります。前者はともかく、後者はjava.lang.Classのメソッドなので気付かない人は一生気付かないかも。

_ arton (2009-07-17 00:09)

おおお、ordinalですね。思い出しました。でも後者は気づいていませんでした。ありがとうございます。

_ arton (2009-07-17 01:12)

ううむ、Enchoの例だと1オリジンだから使えないや。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|

ジェズイットを見習え