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

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

関連記事

JSP Servletでセッションの有効期限を設定する方法

<目次> (1) JSP Servletでセッションの有効期限を設定する方法  (1-1) セッションの有効期限設定の概要  (1-2) 方法1:web.xmlに追記する方法  (1-3) 方法2:プ …

double型で誤差が発生する件について+発生事例やサンプルプログラムも紹介

<目次> (1) double型では誤差が発生する事について  (1-1) double型は近似値を使用している  (1-2) double型の誤差の例 (1) double型で誤差が発生する件につい …

Javaで実装したLinkedListのサンプルプログラムをご紹介

<目次> (1) Javaで実装したLinkedListのサンプルプログラムをご紹介  (1-1) LinkedListの概要  (1-2) LinkedListの特徴  (1-3) LinkedLi …

GitHubのWebAPIをコールしてユーザー情報を取得するサンプルプログラムの解説+エラー対応も2例紹介

(0)目次&概説 (1) 目的  (1-1) 記事の目的 (2) APIの概要  (2-1) APIとは?  (2-2) Web APIとは?  (2-3) Web APIの様々な呼び方   (2-3 …

JSPのコンパイル済ファイルの格納場所(Tomcat単体の場合、Eclipse連携の場合)

<目次> (1) JSPのコンパイル済ファイルの格納場所(Tomcat単体の場合、Eclipse連携の場合)  (1-1) Tomcatを単体で使用している場合  (1-2) Eclipseとアプリケ …

  • English (United States)
  • 日本語
Top