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でcssが適用されない(Resouce interpreted as Stylesheet but transferred with MIME type)事象のトラブルシューティング記録

<目次> (1) JSPでcssが適用されない(Resouce interpreted as Stylesheet but transferred with MIME type)事象のトラブルシューテ …

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

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

「Graphics Device initialization failed for : es2, sw」エラーの原因と対処方法(Java FX関連)

  <目次> (1) 「Graphics Device initialization failed for : es2, sw」エラーの原因と対処方法(Java FX関連)  (1-1) エ …

Linuxサーバ(CentOS6)にEclipse(OXYGEN)をインストールする

0.目次 (1) JDKの概要  (1-1) JDKの種類  (1-2) JDKのバージョン(2018年2月時点) (2) JDKのインストール  (2-1) wget コマンドでJDK の rpm …

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

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

  • English (United States)
  • 日本語
Top