お役立ち情報

Javaでenumを使って出来ることと使い方をまとめました

enumの使い方

Enumとは、列挙子という複数の定数を一つにまとめておくことのできる型です。列挙子をひとまとめにすることから、Enumは列挙型とも呼ばれます。C言語の列挙型もJavaのEnumと似たような使い方ですが、Javaの場合フィールドやメソッドの定義ができるという点で違いがあります。

Enumの定義方法

文章でEnumの説明を見てもいまいちわかりにくいかと思いますので、さっそくサンプルコードを紹介します。Enumのサンプルコードは以下のようになります。

public class Main {
     public static void main(String[] args) {
          Muscle muscle_type =Muscle. Hip;
          System.out.println(muscle_type);
     }
     protected enum Muscle {
          Hip,
          Chest,
          Shoulders
     };
}

上記のソースコードを実行すると、以下のようにコンソール出力されます。

Hip

このサンプルコードでは列挙型のMuscleを定義しています。Musleオブジェクトを宣言することで、Enumの列挙子を格納して使用することが可能です。上のコードではhipの筋肉を出力しました。

switch文でEnumを使用する方法

swich文で条件分岐する形で列挙子を使用することも可能です。具体的には以下のサンプルコードのようになります。

public class Main {
     public static void main(String[] args) {
          Muscle muscle_type =Muscle.Hip;

          switch(muscle_type) {
               caseHip:
                    System.out.println("お尻を鍛える");
                    break;
               case Chest:
                    System.out.println("胸を鍛える");
                    break;
               case Shoulders:
                    System.out.println("肩を鍛える");
                         break;
          }
     }
     protected enum Muscle {
          Hip,
          Chest,
               Shoulders
};

上記のソースコードを実行すると、以下のようにコンソール出力されます。

お尻を鍛える

Enumメソッドの使い方

Enumにはメソッドも用意されているため、単に列挙するだけではありません。以下に、Enumの主要なメソッドとその使い方を紹介します。

valueOfメソッド

valueOfメソッドは、引数で指定した文字列から列挙子名を取得するのに使えるメソッドです。サンプルコードは以下になります。

public class Main {

     public static void main(String[] args) {
          if(Muscle.Hip==Muscle.valueOf("Hip")) {
               System.out.println("お尻を鍛える");
          }
     }
     protected enum Muscle {
          Hip,
          Chest,
          Shoulders
     };
}

上記のソースコードを実行すると、以下のようにコンソール出力されます。

お尻を鍛える

Muscle.Hipで取得しても、Muscle.valueOf(“Hip”)で取得しても同じ結果になるということでした。

valuesメソッド

上のvalueOfメソッドは特定の列挙子を取得しましたが、valuesメソッドはすべての列挙子を取得します。

public class Main {

     public static void main(String[] args) {
          for(Muscle msl : Muscle.values()) {
               System.out.println(msl);
          }
     }
     protected enum Muscle {
          Hip,
          Chest,
          Shoulder
     };
}

上記のコードを実行すると、以下のようにコンソール出力されます。

Hip
Chest
Shoulders

for文のなかの記述によって、mslのなかにすべてのマッスル要素が格納されました。

フィールド変数とコンストラクタの定義を行う方法

Enumでフィールド変数とコンストラクタの定義を行う方法は以下です。

public enum Muscle{
     Hip(1),
     Chest (2),
     Shoulders (3);
     // フィールドの定義
     private int id;
     // コンストラクタの定義
     private Muscle(int id) {
          this.id = id;
     }
}

上記のようにフィールドとコンストラクタの定義を行うことが可能です。必須条件としては、コンストラクタのアクセス修飾子privateのみ、コンストラクタの処理の記述は必須、ということでしょう。

文字列の定義を行う場合も処理の概要は同じです。

public enum Fruit {
     Hip("尻"),
     Chest("胸"),
     Shoulders ("肩");
     // フィールドの定義
     private String name;
     // コンストラクタの定義
     private Fruit(String name) {
          this.name = name;
     }
}

メソッドの定義を行う方法

フィールドやコンストラクタだけではなく、Enumではメソッドの定義を行うことも可能です。

public class Main {

     public static void main(String[] args) {
          for(Muscle msl : Muscle.values()) {
               System.out.println(msl.ordinal() + ":" + msl.name() + "," + msl.getValue());
          }
     }

     prorotected enum Muscle {
          Hip("尻"),
          Chest("胸"),
          Shoulders("肩");
          //フィールドを定義
          private String name;
          //コンストラクタを定義
          private Muscle(String name) {
               this.name = name;
          }
          // メソッド
          public String getValue() {
               return this.name;
          }
     }
}

上記のソースコードを実行すると、以下のようにコンソール出力されます。

0:Hip,尻
1:Chest,胸
2:Shoulders,肩

getValueメソッドを定義することで、列挙子の値を取得できるようにしています。ordinalメソッドとnameメソッドについては、Enumに標準搭載されているメソッドです。ordinalメソッドで列挙子の順番を取得、nameメソッドで列挙子の名前、getValueメソッドで列挙子の値を取得して出力する、という全体構造になります。

以上、Enumクラスの概要や実際の使い方について解説しました。Enumの基本機能は列挙子を列挙してその他のクラスから利用することですが、単に列挙するだけではなく、フィールド、コンストラクタ、メソッドを定義することが可能です。

今回紹介したものは基本的なものですが、実際のシステム開発においてはEnumのなかにステップ数の多い処理を記述するケースも多いです。今回Enumの内容がよくわからなくても、概要さえ把握しておけば実際に開発を行う段階で自由に使えるように慣れていきます。

なので、最初から完璧を目指すよりも、最初は概要を掴むイメージが良いでしょう。それがプログラミングを長く楽しく継続するコツでもあります。

キャリアカウンセリングのプロとして
あなたに合った案件をご案内します。

まずはお気軽にお問い合わせください!

イメージ