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

18/11/18 15:01:31     19/05/05 15:35:30

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の内容がよくわからなくても、概要さえ把握しておけば実際に開発を行う段階で自由に使えるように慣れていきます。

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

案件量が豊富なアルマサーチ

アルマサーチ

最後に、アルマサーチのご紹介!

アルマサーチはフリーランス向けに案件をご紹介することに特化したエージェントサービスです。豊富な案件量から、安定して継続的な案件のご紹介を実現しており、口コミから登録エンジニアが急増中です。

アルマサーチが選ばれる理由

  1. 豊富な案件量。週3?4日の案件や在宅リモート案件も。
  2. 優秀なコンサルタント陣。
  3. 案件に参画後もしっかりサポート。

豊富な案件量

フリーランス向けに特化し、業界屈指の案件量を誇ります!週3?4日の案件や、在宅リモート案件もありますし、その他あらゆる希望をしっかりお伝えください。最適な案件のご紹介をさせていただきます。

優秀なコンサルタント陣

技術に疎く、開発の希望を伝えても響かないエージェント・・・嫌ですよね。アルマサーチにはそのような者は一切おりません!さらに独立にまつわる税金や保険関係に詳しいスタッフが徹底的にサポートさせていただきます。

案件に参画後もしっかりサポート

常駐先が決まった瞬間に、一度も連絡が取れなくなるエージェント・・・いますよね?アルマサーチでは、そのようなことは一切ありません!常に電話やメールは即対応しますし、月に1度のランチミーティングなどから現場の状況を細かくヒアリングし、就業環境改善に尽力いたします。

相談する

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する