コンストラクター/フィールド/メソッドの定義
列挙型もまたクラスの一種ですから、配下にコンストラクターやフィールド/メソッドを定義することも可能です。
WeekdayEnum.java
public enum WeekdayEnum { Sunday("sun"), Monday("mon"), Tuesday("tue"), Wednesday("wed"), Thursday("thu"), Friday("fri"), Saturday("sat"); // フィールド private String name; // コンストラクター private WeekdayEnum(String name) { this.name = name; } // メソッド @Override public String toString() { return this.name; } }
列挙値に、それ自身の識別子とは別に(たとえば)表示のための値を持たせたい、などの目的がある場合には、この例のようにフィールドを準備します。この例であれば、曜日の短縮名をnameフィールドに持たせます。
フィールドは、一般的なクラスと同じく、コンストラクターで初期化できます。構文は基本的にクラスのそれに準じますが、アクセス修飾子はprivate固定となる点に注意してください(よって、サンプルのコードもprivateを省略しても意味は同じです)。
コンストラクターを定義したら、列挙定数もこれに合わせて「列挙定数(引数, ….)の形式で宣言する必要があります。また、以降のメンバー定義と区切りが明確になるように、列挙定数の末尾には「;」セミコロンを置きます。
最後にメソッドの定義です。ここでは、nameフィールドの値を取り出せるよう、toStringメソッドを定義しています。構文はクラスで学んだものと同様なので、特筆すべき点はありません。
以上のように定義した列挙型は、以下のように利用できます。
System.out.println(WeekdayEnum.Monday.toString()); // 結果:mon