株式会社イーブ|未経験・転職の方も就職可能。Javaプログラマー育成のエキスパート

HOMEJAVA技術者育成システム開発求人情報個人情報保護

第 13 回 ~ 列挙型(enum)使いまくり ~

トップページ > Java技術者育成 > Javaワンポイント > 第 13 回 ~ 列挙型(enum)使いまくり ~
以前、 列挙型を使用しビットフラグ を実装しました。
今回は、列挙型についてもう少し詳しく解説して見たいと思います。
Javaの列挙型はクラスやインターフェイスと同レベルで実装されています。
つまり、内部クラス(列挙型)として作らない場合は1つのファイルで作るのが普通です。
また、クラスやインターフェイスと同様に「型」として扱われます。
そこで、もう少し詳しく見ていくと、Javaの列挙型は実は 「Enum」抽象クラス の実装として生成されています。
そのため列挙型には、フィールドやメソッドを持たせることができます。
コンストラクタも定義できますし、toStringメソッド等、Objectクラスに持っている メソッドのオーバーライドや、内部クラスまで定義できてしまいます。
以下にサンプルを挙げますが、
要素の一覧の後に「;」があることに注目してください。
この「;」のあとに通常のクラスと同様にメンバを定義することができます。
また、Card(トランプ)列挙型の内部クラスとしてSuit(マーク)列挙型を 定義していることにも注目してください。
使用しているクラス(CardTest)では一覧表示に列挙型のメソッドを利用して 表示しています。
今回もコードが2つに分かれていますので注意してください。

//**************************************************
// トランプ
//**************************************************
public enum Card {

    s01(Suit.SPADE, 1), h01(Suit.HEART, 1), d01(Suit.DIAMONDS, 1), c01(Suit.CLUB, 1),
    s02(Suit.SPADE, 2), h02(Suit.HEART, 2), d02(Suit.DIAMONDS, 2), c02(Suit.CLUB, 2),
    s03(Suit.SPADE, 3), h03(Suit.HEART, 3), d03(Suit.DIAMONDS, 3), c03(Suit.CLUB, 3),
    s04(Suit.SPADE, 4), h04(Suit.HEART, 4), d04(Suit.DIAMONDS, 4), c04(Suit.CLUB, 4),
    s05(Suit.SPADE, 5), h05(Suit.HEART, 5), d05(Suit.DIAMONDS, 5), c05(Suit.CLUB, 5),
    s06(Suit.SPADE, 6), h06(Suit.HEART, 6), d06(Suit.DIAMONDS, 6), c06(Suit.CLUB, 6),
    s07(Suit.SPADE, 7), h07(Suit.HEART, 7), d07(Suit.DIAMONDS, 7), c07(Suit.CLUB, 7),
    s08(Suit.SPADE, 8), h08(Suit.HEART, 8), d08(Suit.DIAMONDS, 8), c08(Suit.CLUB, 8),
    s09(Suit.SPADE, 9), h09(Suit.HEART, 9), d09(Suit.DIAMONDS, 9), c09(Suit.CLUB, 9),
    s10(Suit.SPADE, 10), h10(Suit.HEART, 10), d10(Suit.DIAMONDS, 10), c10(Suit.CLUB, 10),
    s11(Suit.SPADE, 11), h11(Suit.HEART, 11), d11(Suit.DIAMONDS, 11), c11(Suit.CLUB, 11),
    s12(Suit.SPADE, 12), h12(Suit.HEART, 12), d12(Suit.DIAMONDS, 12), c12(Suit.CLUB, 12),
    s13(Suit.SPADE, 13), h13(Suit.HEART, 13), d13(Suit.DIAMONDS, 13), c13(Suit.CLUB, 13);

    // コンストラクタ
    private Card(Suit suit, int no) {
        this.suit = suit;
        this.no = no;
    }

    // 数値
    private int no = 0;
    public int getNo() { return no; }

    // マーク
    private Suit suit = Suit.SPADE;
    public Suit getSuit() { return suit; }

    //**************************************************
    // マーク
    //**************************************************
    public enum Suit {

        SPADE("スペード", 1),
        HEART("ハート", 2),
        DIAMONDS("ダイヤ", 3),
        CLUB("クラブ", 4);

        // コンストラクタ
        private Suit(String jpName, int rank) {
            this.jpName = jpName;
            this.rank = rank;
        }

        // 日本語名
        private String jpName = "";
        public String getJpName() { return jpName; }

        // 優先度
        private int rank = 0;
        public int getRank() { return rank; }
    }
}

以下、トランプの一覧表示のサンプルです。

public class CardTest {
    public static void main(String[] args) {
        for (Card c: Card.values()) {
            System.out.println(c + ":" + c.getSuit().getJpName() + c.getNo());
        }
    }
}


誰かオイラの目の前においしい料理を列挙して!!!

[Javaワンポイント]内の前後の記事
第 14 回 ~ プロパティキャッシュ ~
→ 第 13 回 ~ 列挙型(enum)使いまくり ~
第 12 回 ~ イベント処理 ~


■更新日時での前後の記事
8月8日 お天気
→ 第 13 回 ~ 列挙型(enum)使いまくり ~
8月7日 お天気