
列挙型の特徴
- クラスの内部に定義した場合は、自動的にstaticになります。
- 列挙型内部で、独自のメンバ変数、メソッド、コンストラクタを定義することができます。
列挙型の意義
プログラムの確実性を高めることができる。
メソッドの引数や戻り値にenumを使うことでそれ以外の値は取らないという形で縛ることができるのでプログラムの保守性や確実性を高めることができます。
例えば、他の型であれば不正な値が入りえる。
static finalでも同じように不正な値は入らないのですが、enumであれば値の種類すら縛ることができるのでより強力な固定値になると言えます。
String型
文字列を期待したいのに、nullや、空白等の不正な値が入りえる。
int型
整数値を入れたいのに、-99等の不正な値が入りえる。
boolean型
true、falseの2種類の値しか入りえないが、3種類以上の値は扱えない。
列挙型なら、「指定した値」のみ値として扱うことが可能
構文
1 2 3 |
アクセス修飾子 enum 列挙型名{ 列挙子1,列挙子2,列挙子3; } |
サンプル
Javaの標準規約では、列挙型には大文字を使うことになっています。
1 2 3 4 5 6 7 |
public enum yasai{ NINJIN,GOBOU,KYUURI; } public static void main(String[] args) { System.out.println(yasai.NINJIN); } |
実行結果
Enumは、クラスとして宣言可能
enumは、一つのクラスでもあるので、下記のように一つのクラスファイルとしても宣言が可能です。C言語にも列挙型はありますが、クラス機能はC言語にはない機能です。
Yasai.java
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package test3; public enum Yasai{ NINJIN,GOBOU,KYUURI; // フィールドの定義 private int id; // コンストラクタの定義 private Yasai(int id) { this.id = id; } } |
クラスなので列挙する値とは別にフィールドやコンストラクタなども定義することができます。またenumクラスのコンストラクタはアクセス修飾子としてprivateのみを取ることが可能になっています。
また、別のクラスを継承して作ることはできませんが、インターフェースを実装して定義することは可能です。
この記事へのコメントはありません。