山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

Javaのenumのメリット

Javaには列挙型というものがあります。

enum Color {
    RED,
    BLUE,
    YELLOW
}

といったふうに宣言してColor.REDというふうに使うことができます。赤は1,青は2,黃は3というふうにルールづけだけでコードを書くと、何番が何色だっけ?といつも考えないといけないし、2番が赤と思い間違えるとコードの解読が困難になったりバグを埋め込んでしまいかねません。

こういう定数的なもののやり方として他にstatic変数をよく使ったりします。

public class Color {
    public static final int RED=1;
    public static final int BLUE=2;
    public static final int YELLOW=3;
}

これでもコードの可読性を確保できます。新しいことを覚えなくてもいいからこっちのほうがいいじゃないかと思うかもしれません。ではstatic変数と比べた列挙型のメリットは何なのか。

調べてみたところでは型チェックを効かせられるということですね。static変数はintなので代入するときはintであれば範囲外のものも使えてしまいますし比較するときもColorと全然関係ないものと比較できてしまいます。そういう問題を回避するためにクラスを定義して・・・というテクニックがあるようなのですが厳密にやるにはなかなか手間がかかる。そういうことが簡単にできるのがenumの利点です。

enumなし

public void setColor(int color) {}

enum

public void setColor(Color color) {}

enumなしだと0でも-1でも100でもセットできてしまいます。enumを使うとRED,BLUE,YELLOW以外渡せません。またIDEの自動補完も効かせられそうですね。