Rainbow Planet

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

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

関連記事

JSP/Servletで値を受け渡す方法(画面に入力された値を画面遷移で渡す方法)

<目次> (1) JSP/Servletで値を渡す方法(画面に入力された値を画面遷移で渡す方法)  (1-1) 構文  (1-2) サンプルプログラム (1) JSP/Servletで値を渡す方法(画 …

JFreeChartで描画したグラフをJSP/Servlet画面に表示する方法

(0)目次&概説 (1) 記事の目的  (1-1) 目的 (2) 表示方法の概要  (2-1) 表示の仕組み  (2-2) 実装の手順 (3) サンプルプログラム  (3-1) JSPのサンプルプログ …

Javaのthisとは?コンストラクタで引数を与えている場合・メソッド引数に使われる場合もご紹介

<目次> (1) Javaのthisとは?コンストラクタに出現する場合やメソッド引数に使われる場合もご紹介  (1-1) thisとは?  (1-2) 用途1:自分自身を指定【重要】  (1-3) 用 …

502 Proxy Error : Reason: Error reading from remote serverの原因と解消法メモ

<目次> (1) 502 Proxy Error : Reason: Error reading from remote serverの原因と解消法メモ  (1-1) 発生状況・エラーメッセージ  ( …

Javaのswitch-case文の構文や使い方を紹介+UFOキャッチャーの座標移動プログラムも紹介

<目次> (1) Javaのswitch-case文の構文や使い方を紹介  (1-1) switch-caseの構文  (1-2) else-if文との比較 (2) サンプルプログラムの紹介  (2- …

  • English (United States)
  • 日本語
Top