Rainbow Engine

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

Java

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

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

<目次>

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

(1) Javaのenumとは?意味や用途を様々な利用シーンでご紹介

(1-1) enumとは?

enumは定数の配列を定義する時に使う特別なクラス(Class)の種類です。通常のクラスと似た形で変数やメソッドを定義できます。EnumはJava 5より導入されています。

JavaAPIのクラスであるjava.lang.Enumを継承しているため、enumはclassのように他のクラスを継承する事はできません(Javaが多重継承を許容しないため)。
 

(1-2) 構文(enumの定義)

次のようにクラスに似た作りになっています。通常「public class」や「public interface」と記述する所を「enum」と記述しています。

public enum [enum名] {
  [enumの変数やメソッドを実装]
}

一つ例をご紹介します。
(例)

public enum Size {
    LARGE,
    MEDIUM,
    SMALL
}

このenumを実際に使う際は次のように記述する事ができます。

Size sz = Size.MEDIUM;

この「sz」という名前の変数の型が、先程定義したenumの「Size」になっており、この変数「sz」は「Size」enumの定数のうち、どれか一つを受け取る事ができます(LARGE、MEDIUM、SMALLのいずれか)。

目次にもどる

(1-3) 様々なenumの使用例

①if文での使用
if文での値の比較も通常のクラスと同じ要領で行えます。

Size sz = Size.MEDIUM;
if( sz == Size.LARGE) {
  //LARGEの時の処理
} else if( sz == Size.MEDIUM) {
  //MEDIUMの時の処理
} else if( sz == Size.SMALL) {
  //SMALLの時の処理
}

(サンプルプログラム)
※上記構文にmain文やenum定義を補記して、実行可能にしたサンプルPG

public class IT0223_enumSample1_if {
    public static void main(String args[]) {
        Size1 sz = Size1.MEDIUM;
        // if分岐でenum使用するサンプル
        if(sz == Size1.LARGE) {
            System.out.println("This is LARGE");
        }else if(sz == Size1.MEDIUM) {
            System.out.println("This is MEDIUM");
        }else if(sz == Size1.SMALL) {
            System.out.println("This is SMALL");
        }
    }
}

enum Size1 {
    LARGE,
    MEDIUM,
    SMALL
}

(図131)

②for文での使用
下記のサンプルはenumで定義した変数をforループで順次取得するプログラムです。コンソールにはenumの変数自体の名前が表示されます。

//ループ処理で定義値の取得が可能
for (Size sz : Size.values()) {
 System.out.println(sz);
}

(サンプルプログラム)
※上記構文にmain文やenum定義を補記して、実行可能にしたサンプルPG

public class IT0223_enumSample2_for {
    public static void main(String args[]) {
        for(Size2 sz : Size2.values()) {
            System.out.println(sz);
        }
    }
}

enum Size2 {
    LARGE,
    MEDIUM,
    SMALL
}

(図132)

③switch文での使用
enumはswitch文の中で与える事もできます。switch文の中で使用する利点として、Size型の変数szはenumで定義した「LARGE、MEDIUM、SMALL」のいずれかの値しか取り得ないため、プログラムのバグを防ぐ役割も果たします。

Size sz = Size.MEDIUM;
switch (sz) {
 case LARGE   : [LARGEの時の処理]; break;
 case MEDIUM  : [MEDIUMの時の処理]; break;
 case SMALL   : [SMALLの時の処理]; break;
}

(サンプルプログラム)
※上記構文にmain文やenum定義を補記して、実行可能にしたサンプルPG

public class IT0223_enumSample3_switch {
    public static void main(String args[]) {

        Size3 sz = Size3.SMALL;
        switch (sz) {
            case LARGE   : System.out.println("Size is LARGE"); break;
            case MEDIUM   : System.out.println("Size is MEDIUM"); break;
            case SMALL   : System.out.println("Size is SMALL"); break;
        }

    }
}

enum Size3 {
    LARGE,
    MEDIUM,
    SMALL
}
(図133)

④enum⇒Stringへ変換
enumはコンパイル時に自動で「toString()」メソッドが使えるようになっており、このメソッドを使う事でenumのインスタンスをStringに変換する事ができます。
 
//toStringメソッドでStringに変換
String sz_str = Size.SMALL.toString();

(サンプルプログラム)
※上記構文にmain文やenum定義を補記して、実行可能にしたサンプルPG

public class IT0223_enumSample4_convert {
    public static void main(String args[]) {

        //enumをStringに変換
        String sz_str = Size4.SMALL.toString();
        System.out.println(sz_str);
        //enumのままでも出力できる
        System.out.println(Size4.SMALL);

        //ただし、同じ表示結果でも型は異なる
        //(型のチェック)
        if(sz_str instanceof String) { System.out.println("It's String"); }
        if(Size4.SMALL instanceof Size4) { System.out.println("It's Size4"); }
    }
}

enum Size4 {
    LARGE,
    MEDIUM,
    SMALL
}
(図134)

⑤valueOf()メソッド
enumクラスはコンパイル時に自動で「static valueOf()」メソッドを生成します。
この「valueOf()」メソッドは引数で指定した値に対するenumのインスタンスを返却します。

//valueOfメソッドで引数に指定した値に対応するenumインスタンスを返却
Size sz = Size.valueOf("LARGE");

(サンプルプログラム)
※上記構文にmain文やenum定義を補記して、実行可能にしたサンプルPG

public class IT0223_enumSample5_valueof {
    public static void main(String args[]) {

        Size5 sz = Size5.valueOf("LARGE");
        System.out.println(sz);
    }
}

enum Size5 {
    LARGE,
    MEDIUM,
    SMALL
}

(図135)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Java

執筆者:


comment

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

関連記事

JFreeChartを使ってJavaで様々なグラフを簡単に描画する方法

(0)目次&概説 (1) 記事の目的  (1-1) 目的 (2) JFreeChartの概要  (2-1) JFreeChartとは?  (2-2) JFreeChartのアーキテクチャについて (3 …

サーブレットとは?その役割やHelloWorldサンプルコードのご紹介

(0)目次&概説 (1) サーブレットの基本  (1-1) サーブレットとは?  (1-2) サーブレットの前身技術との比較  (1-3) サーブレットとJSPの違い  (1-4) サーブレットのHe …

木構造の探索における計算量の違いや木構造の種類について(B木/二分木/2-3探索木)

<目次> (1) 木構造の探索における計算量の違いや木構造の種類について(B木/二分木/2-3探索木)  (1-1) 木構造について  (1-2) 「B木」構造  (1-3) 「二分木」構造  (1- …

オープンアドレス法のアルゴリズムについて図を使ってご紹介

<目次> (1) オープンアドレス法のアルゴリズムについて図を使ってご紹介  (1-1) オープンアドレス法とは?  (1-2) オープンアドレス法のアルゴリズム  (1-3) オープンアドレス法の利 …

Javaのラッパークラスとは?使い方や一覧をご紹介

<目次> (1) Javaのラッパークラスとは?使い方や一覧をご紹介  (1-1) ラッパークラスとは?  (1-2) 構文(オブジェクト生成)  (1-3) 代表的なメソッド(Integerを例に) …

  • English (United States)
  • 日本語
Top