CALENDAR
S M T T F S
    123
45678910
11121314151617
18192021222324
25262728293031
<< October 2020 >>
ARCHIVES
CATEGORIES
RECOMMEND
RECOMMEND
Javaデザインパターン徹底攻略 (標準プログラマーズライブラリ)
Javaデザインパターン徹底攻略 (標準プログラマーズライブラリ) (JUGEMレビュー »)
日立ソフトウェアエンジニアリングインターネットビジネス部
RECOMMEND
RECOMMEND
独習Java第3版
独習Java第3版 (JUGEMレビュー »)
ジョゼフ・オニール
MOBILE
qrcode
今更だがEnum(java)

JUGEMテーマ:Java

 

今更ですが、javaのEnumについてずらずらと・・・

 

正直、Enumについてよくわかってませんでした。

 

列挙型と呼ばれ、処理で必要な定数を管理するのに適している、とのことです。

 

 

定数だったら、finalで宣言してinterfaceに定義して実装すればいいじゃん

 

なんて思ってませんか?(私は思っていました)

 

こんな感じ

 

--------------------------------------------------


public interface StringConst {

    public static final String NAME = "太陽戦隊サンバルカン";

}

 

public class ConstSample implements StringConst {

    public static void main(String[] args) {

        System.out.println(NAME);

    }
}

 

実行結果

 

太陽戦隊サンバルカン

 

--------------------------------------------------

 

みたいやつ

 

あまりよろしくないみたいです。

 

単純に値を取得するだけだったら問題ないみたいですが、比較したりするときに面倒だったりします。

 

Stringだったりintだったりそこら辺を考慮しないといけない・・・

 

ということでEnumを使いましょうということらしい。

 

Enum型の実装例はこんな感じ!

---------------------------------

 

public enum SunVulcan {

    // 要素
    EAGLE(1 , "バルイーグル") ,
    SHARK(2 , "バルシャーク") ,
    PANTHER(3 , "バルパンサー") ;

    // コード
    private int code;

    // 設定値
    private String value;

    // コンストラクタ(要素に値を設定)
    private SunVulcan(int code, String value) {
        this.code = code;
        this.value = value;
    }

    // コードを取得
    public int getCode() {
        return code;
    }

    // 設定値を取得
    public String getValue() {
        return value;
    }

    // コードをenum型に変換
    static SunVulcan codeOfEnum(int code) {

        // 要素を取得(配列)
        SunVulcan[] array = values();

        for (SunVulcan sunVulcan : array) {

            // 一致するコードを取得
            if(code == sunVulcan.getCode()) {
                return sunVulcan;
            };
        }

        // 一致するコードがない場合nullを返す
        return null;
    }


    // 設定値をenum型に変換
    static SunVulcan valueOfEnum(String value) {

        // 要素を取得(配列)
        SunVulcan[] array = values();

        for (SunVulcan sunVulcan : array) {

            // 一致する設定値を取得
            if(sunVulcan.getValue().equals(value)) {
                return sunVulcan;
            };
        }

        // 一致する設定値がない場合nullを返す
        return null;
    }
}

 

---------------------------------

 

コメント書いてありますので大体わかると思いますが、簡単な説明

 

・コンストラクタ

    private SunVulcan(int code, String value) {
        this.code = code;
        this.value = value;
    }

 

  列挙型にcode値とvalue値を設定しています

 

・要素

    EAGLE(1 , "バルイーグル") ,
    SHARK(2 , "バルシャーク") ,
    PANTHER(3 , "バルパンサー") ;

 

  ここで、enum SunVulcanが持つ要素を定義しています。

  ( )の中身はそれぞれが保持する、code値とvalue値になります。

 

  すなわち、要素EAGLE 1code値)と "バルイーグル"value値)を持つということになります。

 

※便宜上「要素」と表現しておりますが、正式名称は知りません。

 

・getter

 getCode()

  要素に保持されているcode値を取得します。

 

 getValue()

  要素に保持されているvalue値を取得します。

 

・enum型に変換

 static SunVulcan codeOfEnum(int code)

  引数のcode値と各要素のcode値を比較し、一致する要素を返します。

 

  static SunVulcan valueOfEnum(String value)

  引数のvalue値と各要素のvalue値を比較し一致する要素を返します。

 

※values()でenumが持つ要素すべてを取得し、配列に格納します。

 配列内の各要素と引数を比較し一致するものを返します。

 

 

こんなところですかね、

 

 

使用例

---------------------------------

public class EnumSample {

    public static void main(String[] args) {

        int code = 2;

        // コード値からEnumを作成
        SunVulcan sunVulcan = SunVulcan.codeOfEnum(code);

        // Enumを出力
        System.out.println("Enum : " + sunVulcan);

        // Enumによって処理を振り分ける
        switch (sunVulcan) {
        case EAGLE:
            System.out.println(sunVulcan.getCode() + " バルイーグル");
            break;

        case SHARK:
            System.out.println(sunVulcan.getCode() + " バルシャーク");
            break;

        case PANTHER:
            System.out.println(sunVulcan.getCode() + " バルパンサー");
            break;

        default:
            break;
        }

        // コード値から設定値を取得する
        System.out.println("コードに対応する設定値 " + sunVulcan.getValue());

    }

}

 

---------------------------------

 

 

実行結果

---------------------------------

Enum : SHARK
2 バルシャーク
コードに対応する設定値 バルシャーク

---------------------------------

 

こんなところでしょう。

 

swich文でそのまま使えるというのが最大の利点なのかもしれません。(個人的にはそう思います)

 

 

あと、Enum使ったほうがなんかかっこいいと思います。

 

以上となります。

 

 

 

 

| JAVAとか | 01:55 | comments(0) | trackbacks(0) | pookmark |
<< MOON CHILD | main | 希望に満ちたあの頃、純粋だったあの頃・・ >>
コメント
コメントする









この記事のトラックバックURL
トラックバック機能は終了しました。
トラックバック