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

