列挙型もまたクラスの一種ですから、配下にコンストラクターやフィールド/メソッドを定義することも可能です。
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
監修
山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。