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