English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 基础教程

Java フローコントロール

Java 配列

Java 面向オブジェクト(I)

Java 面向オブジェクト(II)

Java 面向オブジェクト(III)

Java 例外処理

Java リスト(List)

Java キュー(キュー)

Java Mapコレクション

Java Setコレクション

Java 入出力(I/O)

Java Reader/Writer

Java 他のトピック

Java 列挙(Enum)

このチュートリアルでは、Javaのエnumを学びます。例を通じてエnumとエnumクラスの作成と使用を学びます。

Javaでは、エnumは固定の可能値セットを持つタイプです。enumキーワードを使用してエnumを宣言します。例えば、

enum Size { 
   SMALL, MEDIUM, LARGE, EXTRALARGE 
}

ここでは、Sizeという名前のエnumを作成しました。

括弧内の値はエnum値(定数)と呼ばれます。これらはエnumタイプが保持できるユニークな値です。

注意:エnum定数は通常大文字で表されます。

簡単な例を紹介しましょう。

enum Size {
   SMALL, MEDIUM, LARGE, EXTRALARGE
}
class Main {
   public static void main(String[] args) {
      System.out.println(Size.SMALL);
      System.out.println(Size.MEDIUM);
   }
}

出力結果

SMALL
MEDIUM

上記の例から分かりますように、私たちはエnum名を使用して定数値にアクセスします。

同様に、列挙型の変数を生成することもできます。例えば、}}

Size pizzaSize;

ここでは、pizzaSizeはSize型の変数です。以下の4の値。

pizzaSize = Size.SMALL;
pizzaSize = Size.MEDIUM;
pizzaSize = Size.LARGE;
pizzaSize = Size.EXTRALARGE;

例1:Javaの列挙型

enum Size {
 SMALL, MEDIUM, LARGE, EXTRALARGE
}
class Test {
 Size pizzaSize;
 public Test(Size pizzaSize) {
   this.pizzaSize = pizzaSize;
 }
 public void orderPizza() {
   switch(pizzaSize) {
     case SMALL:
       System.out.println("私は小さいピザを注文しました。");
       break;
     case MEDIUM:
       System.out.println("私は中号のピザを注文しました。");
       break;
     default:
       System.out.println("私はどれを選ぶべきか分かりません。");
       break;
   }
 }
}
class Main {
 public static void main(String[] args) {
   Test t1 = new Test(Size.MEDIUM);
   t1.orderPizza();
 }
}

出力結果

私は中号のピザを注文しました。

上記のプログラムでは、列挙型Sizeを生成し、Size型の変数pizzaSizeを宣言しました。

変数pizzaSizeは、以下の4の値(SMALL、MEDIUM、LARGE、EXTRALARGE)。

変数pizzaSizeにMEDIUM定数が割り当てられます。これに基づいて、switch case文の1つのケースを印刷します。

Javaの列挙型クラス

Javaでは、列挙型はクラスの特殊なタイプとされています。それはJava 5リリース版で導入されました。

列挙型クラスは通常のクラスと同様にメソッドとフィールドを含むことができます。

enum Size {
    constant;1, constant;2, …, constantN;
    //メソッドとフィールド
}

列挙型定数は常にデフォルトでpublic static finalとされます。

enumクラスを生成するとき、コンパイラは各enum定数のインスタンス(オブジェクト)も生成します。

例2:列挙型クラス

enum Size{
   SMALL, MEDIUM, LARGE, EXTRALARGE;
   public String getSize() {
      //これはオブジェクトSMALLを参照します
      switch(this) {
         case SMALL:
          return "small";
         case MEDIUM:
          return "medium";
         case LARGE:
          return "large";
         case EXTRALARGE:
          return "extra large";
         default:
          return null;
      }
   }
   public static void main(String[] args) {
      //オブジェクトSMALLを使用してgetSize()メソッドを呼び出します
      System.out.println("ピザのサイズは「" + Size.SMALL.getSize());
   }
}

出力結果

ピザのサイズはsmallです

上記の例では、エンümクラス Sizeを作成しました。このクラスにはSMALL、MEDIUM、LARGE、EXTRALARGEの4つの常量があります。

Sizeはエンümクラスであるため、コンパイラは各エンüm常量にインスタンスを自動的に作成します。

main()メソッド内で、インスタンスSMALLを使用してgetSize()メソッドを呼び出しました。

通常のクラスと同様に、エンümクラスもコンストラクタを含むことができます。詳細については、Java 枚举のコンストラクタ

エンümクラスのメソッド

エンümクラスにはいつでも使用できるいくつかのプリedefインメソッドがあります。

ordinal()メソッド

ordinal()メソッドはエンüm常量の位置を返します。例えば、

ordinal(SMALL) 
//0を返します

compareTo()メソッド

compareTo()メソッドは序数値に基づいてエンüm常量を比較します。例えば、

Size.SMALL.compareTo(Size.MEDIUM)
 //ordinal(SMALL)を返します - ordinal(MEDIUM)

toString()メソッド

toString()メソッドはエンüm常量の文字列表現を返します。例えば、

SMALL.toString()
//「SMALL」を返します

name()メソッド

name()メソッドはエンüm常量の定義名を文字列形式で返します。name()メソッドが返す値はfinalです。例えば、

name(SMALL)
//「SMALL」を返します

valueOf()メソッド

valueOf()メソッドは文字列を受け取り、同じ文字列名のエンüm常量を返します。例えば、

Size.valueOf("SMALL")
//常量 SMALLを返します

values()メソッド

values()メソッドは、すべてのエンüm常量を含むエンümタイプの配列を返します。例えば、

Size[] enumArray = Size.value();

Javaエンümを使う理由は何ですか?

Javaでは、int定数の使用を代わりにenumを導入しました。

int定数の集合を使用していると仮定します。

class Size {
   public final static int SMALL = 1;
   public final static int MEDIUM = 2;
   public final static int LARGE = 3;
   public final static int EXTRALARGE = 4;
}

 ここで、定数を印刷すると、問題が発生します。これは、数字だけを印刷するため、助けにはなりません。

したがって、int定数を使用する代わりにエnumを使用することができます。例えば、

enum Size {
   SMALL, MEDIUM, LARGE, EXTRALARGE
}

これにより、私たちのコードがより直感的になります。

同様に、エnumはコンパイル時のタイプの安全性を提供します。

Size タイプの変数(例えば、上記の例のように)を宣言すると、その変数が4つの値のうちの1つを収容する確実性が得られます。4つの値以外の値を渡そうとすると、コンパイラがエラーを投げ出します。