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

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

関連記事

TwitterのAPIでハッシュタグからツイートを探すJavaプログラムのご紹介

<目次> (1) TwitterのAPIでハッシュタグからツイートを探すJavaプログラムのご紹介  (1-1) プログラムの概要  (1-2) サンプルプログラム  (1-3) 操作イメージ (1) …

Javaでハッシュ値を計算する方法について

<目次> (1) Javaでハッシュ値を計算する方法について  (1-1) ハッシュを使った探索の概要  (1-2) ハッシュからアドレスを計算する方法  (1-3) サンプルプログラム (1) Ja …

Javaのアーキテクチャ概要やプログラムのコンパイルから実行までの流れ

(0)目次&概説 (1) 記事の目的  (1-1) 目的 (2) Javaのアーキテクチャ概要・概観  (2-1) プログラムのコンパイル~実行の流れ  (2-2) Javaアーキテクチャの特徴    …

Javaのenumとは?使い方や意味を様々な利用シーンでご紹介(if、for、switch他)

<目次> (1) Javaのenumとは?意味や用途を様々な利用シーンでご紹介   (1-1) enumとは?  (1-2) 構文(enumの定義)  (1-3) 様々なenumの使用例 (1) Ja …

Javaでdouble型での誤差を対処する方法について+サンプルプログラムも紹介

(1) Javaでの誤差の対処法  (1-1) 対処が必要なケース  (1-2) 対処の方法   (1-2-1) BigDecimalクラスでの対処   (1-2-2) int型を優先的に使い対処   …

  • English (United States)
  • 日本語
Top