4. enum2005.11.21 株式会社四次元データ CTO 畠中晃弘
Java言語機能(JDK5.0(Tiger)新機能) 4章 enum
enum 型は、あるカテゴリーに属した複数の定数をひとまとまりとして取り扱うための仕組みです。J2SE 5.0 の enum は、C や C++ の enum ように内部的に整数で定数を保持するものではなく、タイプセーフ enum と呼ばれるパターンを実現したものになっています。 4.1. 簡単な enumまずはじめに簡単な enum 型の定義を示します。 public enum Color { RED, BLUE, YELLOW, BLACK, WHITE }
enum は内部的にはクラスであり、enum 型を定義する場所はクラスを定義する場所と同じです。enum 型もクラス同様パッケージに属します。基本的には 1 ファイルにひとつの enum 型を定義し、型名と同じファイル名(Color 型であれば Color.java)のファイルに記述しますが、内部クラスのように他のクラスの内部にも定義することができます(クラス内部で定義した場合、暗黙的に static な型となります)。アクセス権やアクセス方法もクラスの場合と同じです。 上記の Color クラスを javap コマンドで逆コンパイルすると、以下のように表示されます。 Compiled from "Color.java" これから以下のようなことがわかります。
values メソッドは宣言された定数全てを含む配列(順序は記述順)を返すメソッドで、valueOf メソッドは文字列から定数インスタンスを取得するメソッドです。 Color white = Color.valueOf("WHITE"); // white は Color.WHITE を保持する。
Enum クラスでは他に以下のようなメソッドが定義されています。
メソッドのオーバーライドの方法はこの章の後で説明します。 4.2. カスタムのメソッドの実装enum 型では、独自のメンバ変数やメソッド(コンストラクタを含む)を定義することができます。 ここでは、さきほど例示した Color クラスを改良して、toString() メソッドで色の日本語名を返すようにしてみます。 enum 内の各定数はインスタンスですので、実行時には暗黙的にコンストラクタが呼び出されます。このコンストラクタには引数を持たせることができ、定数ごとに異なる引数を渡すことができます。渡す引数は、定数宣言の定数名の後に「(...)」を記述することで指定します。デフォルト以外のコンストラクタを使用する場合は、そのコンストラクタの実装も行います。 public enum Color {
RED("赤"), BLUE("青"), YELLOW("黄"), BLACK("黒"), WHITE("白");
// メンバ変数の定義
private String name;
// コンストラクタの実装
private Color (String name) {
this.name = name;
}
// メソッドのオーバーライド
public String toString() {
return name;
}
}
定数の箇所に書いた引数は、各定数がインスタンス化されるときに呼び出されるコンストラクタに渡されます。つまりこの例では各インスタンスの name 属性にはそれぞれ色の日本語名を保持することになります。 System.out.println(color.RED.toString()); // 「赤」と表示される。 |
![]()
![]()
|