Javaでたまに出てくるenum型について、学んでみようと思います。
もくじ
1.enum型とは
日本語名で「列挙型」と呼ばれる。
…といってもよく分からないので、まずはイメージしやすいもので考えていきたい。
列挙の例① 曜日:「月・火・水・木・金・土・日」
列挙の例② 都道府県:「北海道・青森県・岩手県・ … ・沖縄県」
このようにenumは、列挙した各要素を、ひとまとめにして管理できるもの、といったイメージである。
曜日の例でいうと、
「月曜日」、「火曜日」、…、「日曜日」という名の各定数を、「曜日」というenumで管理している
「曜日」は、「月曜日」、「火曜日」、…、「日曜日」のいずれかである
と言うことができる。
2.enumの定義方法(基本の基本)
enumの定義は、クラスを定義して定数を宣言するのと、似たような感覚でできる。
*enumの定義ファイル
enumを定義する時は、enum単体でjavaファイルを作る。
ファイル名は、「enumの名称.java」となる。
クラスのファイルを作って、ファイル名を「クラス名.java」とするのと同じである。
*enumの宣言
クラス宣言で「class クラス名」とするのと同様、「enum enum名」とすればOK。
*例
以下は、Dayというenumを定義した例である。
enum内に、曜日として各定数の名前を定義している。
Day.java
public enum DayEnum {
MONDAY,
TUSEDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURADAY,
SUNDAY
}
なお、重要なこととして、「月曜日」、「火曜日」、…、「日曜日」は、
曜日enumのインスタンスの位置づけとなる。
しかも、曜日enumのインスタンスは、あらかじめ定義した月曜~日曜の7個だけしか作れない。
つまり、enumを使うことで、
事前に定義されたインスタンスしか存在しないことを、保証することができると言える。
またインスタンスが事前に定まっているからこそ、enumは定数として扱うことができるとも言える。
3.enumの定義方法(実用編基礎)とenumの使い方
ここまでだけでは、Javaのクラスで定数定義クラスを作るのと同じように見える。
が、ほとんどの場合、enumの定義には、インスタンス名(定数名)以外にも、
コンストラクタ、フィールド、メソッドも定義することになる。
実際にコードを見たほうが早いと思うので、以下コードとともに書いていく。
*例1
public enum EnumExample {
//インスタンス(定数)の定義SUNDAY,MONDAY;
//コンストラクタ
private EnumExample() {
System.out.println("enum生成");
}
//メソッド
public void testMethod() {
System.out.println("はろー");
}
}
→このenumを、Mainクラスのmainメソッドから呼び出した場合を考える。
※Mainクラス
public class Main {
public static void main( String[] args ) {
EnumExample.MONDAY.hello();}
}
→実行結果は以下の通り。
enum生成
enum生成
はろー
enum内の定数の個数分どおり、コンストラクタが動いてインスタンスが生成された後、
enumのメソッドが実行されていることが分かる。
*例2
クラスと同じように、コンストラクタに引数を渡すことも可能。
public enum EnumExample {
SUNDAY("sun"),MONDAY("mon");
private String str;
//コンストラクタ(引数有)
private EnumExample(String str) {
this.str = str;
System.out.println("enum生成: " + this.str);
}
//メソッド
public String getStr() {
return this.str;
}
public void hello() {
System.out.println("はろー");
}
}
※Mainクラス
public class Main {
public static void main( String[] args ) {//enum型のオブジェクトに代入することも可能。(ただし代入は1度きりのみ可)
EnumExample enumEx = EnumExample.MONDAY;System.out.println(enumEx.getStr());
enumEx.hello();
}
}
→実行結果は以下の通り。
enum生成: mon
enum生成: sunmon
はろー
4.まとめ
enumについて、名前を聞いたことがある程度でしたが、
基本的な使い方は何となくわかりました。
インスタンスの存在1個だけ保証という、強力なメリットは分かったものの、
実際どういう場面で使われることが多いのかはまだよく分かっていません。。
ひとまず、今後実務で出くわしたら、今回学んだことを活かせたらいいなと思います◎