技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

java:enum型を使うと何が嬉しいのか調べてみた

実務でenum型が出てきたのですが、私が使った入門書にはenum型に関する説明がなかったので、改めて調べてみました。
 
enum型とは、複数の定数をまとめるための型です。
文法的には以下のページで解説されている通りです。
 
Java入門】Enum(列挙型)の使い方総まとめ  侍エンジニア塾ブログ  プログラミング入門者向け学習情報サイト

https://www.sejuku.net/blog/14779
 
ただ、このページには文法については書いてあっても、enumを使うと何か嬉しいことがあるのかどうかはわからず…。
「int型やString型で定数を定義した方が楽なのでは」と思ってしまったので、もう少し調べてみました。
 
enumを使うメリットについては、このページの解説がわかりやすかったです。
 
テックノート - 今さら聞けないenumの基本を解説

http://javatechnology.net/java/enum/
 
どうやら、呼び出し側から見てどのような値を指定すれば良いのかがわかりやすくなるのがメリットのようです。
確かに、クラスの中に定数を持たせるよりは、enum型のクラスとして定数を外出しにした方が可読性は上がるかもしれません。
 
なお、enumはstaticインポートすることが可能とのことです。
(実務で出くわしたのはこのケースでした)
 
5. static インポート  TECHSCORE(テックスコア)

http://www.techscore.com/tech/Java/JavaSE/JavaLanguage/5/
 
色々調べてみて、定数を色々なクラスで使い回せるというメリットもありそうだと思いました。
それを確かめるためのサンプルプログラムは以下です。
 
【サンプルプログラム】
・ExamplEnum.java
package enumTest;

public enum ExamplEnum{
    OK(1),
    Error(2);

    private int id;

    public int getId() {
        return id;
    }

    private ExamplEnum (int id) {
      this.id = id;
    }

    public static ExamplEnum valueOf(int id) {
        ExamplEnum array = values();
        for(ExamplEnum num : array) {
            if (id == num.getId()){
                return num;
            }
        }
        return null;
    }
}
 
・Main1.java
package enumTest;
import enumTest.ExamplEnum;

public class Main1 {

    public static void main(String args) {
        int param = 1;
        ExamplEnum examplEnum = ExamplEnum.valueOf(param);
        System.out.println("enum : " + examplEnum);
    }
}
 
・Main2.java
package enumTest;
import enumTest.ExamplEnum;

public class Main2 {

    public static void main(String[] args) {
        int param = 2;
        ExamplEnum examplEnum = ExamplEnum.valueOf(param);
        System.out.println("enum : " + examplEnum);
    }
}
 
【実行結果】
・Main1.java
コンソールに下記文字列が出力される。
enum : OK
 
・Main2.java
コンソールに下記文字列が出力される。
enum : Error