Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java

Javaのenumでフィールドを複数定義したり、値を取得する方法

投稿日:2021年1月11日 更新日:

<目次>

(1) Javaのenumでフィールドを複数定義したり、値を取得する方法
 (1-1) enumでフィールドを定義・取得する
 (1-2) enumでフィールドを複数定義・取得する

(1) Javaのenumでフィールドを複数定義したり、値を取得する方法

今回はenumで複数のフィールドを定義・取得する方法についてご紹介します。
そもそもenumとは何か?どういった用途で使うのか?を知りたい方は以下を先にお読み頂くと、より理解がスムーズになります。

記事:Javaのenumとは?使い方や意味を様々な利用シーンでご紹介(if、for、switch他)
URL:https://rainbow-engine.com/java-enum-howto/

 

(1-1) enumでフィールドを定義・取得する

enumは単に定数を定義するのみならず、フィールド(≒変数)を定義する事ができます。書き方は通常のクラスで定義する際と同じ形式でできます。

enum Size5 {
        // カッコ()内の数字を引数にコンストラクタを呼び出し
        LARGE (3),
        MEDIUM (2),
        SMALL (1)
        //(お作法)
        //定数の後ろにフィールドを定義する場合、定数とフィールドの間にコロンが必要
        ;
        // フィールドを定義
        private final int sizecode;

        // enum「Size2」のコンストラクタ
        Size5(int sizecode) {
                this.sizecode = sizecode;
        }
 
そして、enumの定数を定義するタイミングで、引数をコンストラクタに渡して、enumのインスタンス化を行っています。このインスタンスはそのフィールドの情報も保持しています(例:LARGEはsizecode=3を保持)。
 
次のサンプルは上記にmain文等を足して実行可能にしたものです。例えば10行目の「LARGE (3)」でインスタンス化したSize5のenumは、フィールド「sizecode」に値「3」を保持しています。
 
(サンプルプログラム)
public class IT0214_enumSample5_field {
        public static void main(String args[]) {
                for(Size5 sz : Size5.values()) {
                        System.out.println(sz.getSizeCode()+" : "+sz);
                }
        }
}
enum Size5 {
        // カッコ()内の数字を引数にコンストラクタを呼び出し
        LARGE (3),
        MEDIUM (2),
        SMALL (1)
        //(お作法)
        //定数の後ろにフィールドを定義する場合、定数とフィールドの間にコロンが必要
        ;
        // フィールドを定義
        private final int sizecode;

        // enum「Size2」のコンストラクタ
        Size5(int sizecode) {
                this.sizecode = sizecode;
        }

        // sizecodeのゲッター
        int getSizeCode() {
                return this.sizecode;
        }
}
(図111)実行結果

 

(注意点)
enumでフィールドを設定する際には下記の通りいくつかのルールがあります。
①enumで定数の後ろにフィールドを定義する場合、定数とフィールドの間にコロンが必要
 
②またコンストラクタの呼び出しを複数繋げる場合はカンマ「,」で区切ります。
 
③enumのfinalのフィールドはenumのコンストラクタに引き渡す必要があります(定数をインスタンス化する際の情報として使う)。
 
④numのコンストラクタのスコープは「private」かあるいはデフォルトになります(「public」や「protected」には設定できない)。
 
またフィールドは複数定義する事もできます。フィールドの数が増えてもお作法は同じで、コンストラクタが複数の引数を受け取るだけの違いです。
 

(1-2) enumでフィールドを複数定義・取得する

enumではフィールドを複数定義する事もできます。上記のサンプルにメンバ変数を更に1個追加したサンプルを掲載します。

(サンプルプログラム)

public class IT0214_enumSample6_field2 {
        public static void main(String args[]) {
                for(Size6 sz : Size6.values()) {
                        System.out.println(sz.getSizeCode()+" : "+sz.getCode()+" : "+sz);
                }
        }
}

enum Size6 {
        // カッコ()内の数字を引数にコンストラクタを呼び出し
        LARGE (3,"L"),
        MEDIUM (2,"M"),
        SMALL (1,"S")
        //(お作法)
        //定数の後ろにフィールドを定義する場合、定数とフィールドの間にコロンが必要
        ;
        // フィールドを定義(複数個)
        private final int sizecode;
        private final String code;

        // enum「Size2」のコンストラクタ
        Size6(int sizecode, String code) {
                this.sizecode = sizecode;
                this.code = code;
        }

        // ゲッターメソッド
        int getSizeCode() {
                return this.sizecode;
        }
        String getCode() {
                return this.code;
        }
}

(補足)
Sizeはサイズの定数(LARGE、MEDIUM、SMALL)を表すためのenumです。メンバ変数は2つあり「サイズコード(3/2/1)」を保持するための「sizecode」と、「略称(L/M/S)」を保持するための「code」があります。

enumの一番最初の部分で、コンストラクタを3回呼び出しており、LARGEとMEDIUMとSMALLのenumのインスタンスを生成しています。

main文ではfor文でenumの定数分ループして、それぞれの「サイズコード」と「略称」を取得しています。

(実行結果)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Java

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

JavaScriptのAddEventListenerの用途や使用例について

<目次> (1) JavaScriptのAddEventListenerの用途や使用例について  (1-1) 概要  (1-2) 構文  (1-3) サンプルプログラム (1) JavaScriptの …

Servlet/JSPで日本語文字が「???」になる問題とFilterの活用について

(0)目次&概説 (1) 事象 (2) 原因 (3) 対処方法1  (3-1) フィルタクラスの新規作成  (3-2) フィルタクラスへのコード追加  (3-3) 疎通確認テスト (4) 対処方法2 …

no image

jarファイル実行で「java.lang.ClassNotFoundException: com.sun.prism.es2.X11GLFactory」が出る原因と対策

  <目次> (1) jarファイル実行で「java.lang.ClassNotFoundException: com.sun.prism.es2.X11GLFactory」が出る原因と対策 …

デッドロックとライブロックとは?両者の違いやサンプルプログラムをご紹介

  <目次> (1) デッドロックとライブロックとは?両者の違いやサンプルプログラムをご紹介  (1-1) デッドロック   (1-1-1) 概要   (1-1-2) サンプルプログラム   …

JavaScriptの必須チェックのサンプルプログラム

  <目次> (1) JavaScriptの必須チェックのサンプルプログラム  (1-1) 構文  (1-2) サンプルプログラム (1) JavaScriptの必須チェックのサンプルプログ …

  • English (United States)
  • 日本語
Top