第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()); } } }
誰かオイラの目の前においしい料理を列挙して!!!