Java - 列挙型: 初心者のガイド

こんにちは、Javaプログラマー志願者の皆さん!今日は、Javaの素晴らしい世界である列挙型(Enum)について深く掘り下げます。初めて聞いたことがあるかもしれませんが、心配しないでください。このチュートリアルの最後には、列挙型の専門家になることができます!では、お気に入りの飲み物を片手に、始めましょう!

Java - Enums

列挙型の紹介

コードで固定の定数セットを表現する必要があったことがありますか?おそらく、コーヒーショップ用のプログラムを作成していて、異なるサイズのコーヒーカップを表現する必要があったのかもしれません。または、キャラクターが移動できる異なる方向を表現する必要があったゲームを作成していたのかもしれません。そんなとき、列挙型が救助に来ます!

列挙型(Enum)は、Javaでの特殊なクラスで、定数のグループ(変更不可能な変数、つまりfinal変数)を表します。事前定義された値のセットを作成するための風変わりな方法と考えてください。

クラス宣言

まず、列挙型を宣言する方法を見ていきましょう。構文は非常にシンプルです:

enum CoffeeSize {
SMALL,
MEDIUM,
LARGE
}

この例では、CoffeeSizeという名前の列挙型を作成し、3つの定数SMALL、MEDIUM、およびLARGEを含んでいます。classの代わりにenumキーワードを使用し、各定数がコンマで区切られていることに注意してください。

クラスコンストラクタ

列挙型には、通常のクラスと同様にコンストラクタがあります。これにより、各列挙定数に追加のデータを関連付けることができます。CoffeeSizeの例を拡張してみましょう:

enum CoffeeSize {
SMALL(8),
MEDIUM(12),
LARGE(16);

private final int ounces;

CoffeeSize(int ounces) {
this.ounces = ounces;
}

public int getOunces() {
return ounces;
}
}

この更新版では、各サイズのオンス数を表すintパラメータを取るコンストラクタを追加し、プライベートフィールドouncesとゲッターメソッドgetOunces()を追加しました。

クラスメソッド

列挙型には、通常のクラスと同様にメソッドを持つことができます。CoffeeSize列挙型にメソッドを追加してみましょう:

enum CoffeeSize {
SMALL(8),
MEDIUM(12),
LARGE(16);

private final int ounces;

CoffeeSize(int ounces) {
this.ounces = ounces;
}

public int getOunces() {
return ounces;
}

public String getDescription() {
return this.name() + " coffee (" + this.ounces + " oz)";
}
}

getDescription()メソッドを追加し、コーヒーサイズの説明を返す文字列を返します。name()メソッドはEnumクラスから継承され、列挙定数の名前を文字列として返します。

継承されるメソッド

すべての列挙型は、java.lang.Enumから暗黙のうちに継承します。これは、いくつかのビルトインメソッドを持っていることを意味します。以下は、最も一般的に使用されるいくつかのメソッドです:

メソッド 説明
name() 列挙定数の名前を返します
ordinal() 列挙定数の位置(0から始まる)を返します
valueOf(String name) 指定された名前の列挙定数を返します
values() すべての列挙定数を含む配列を返します

では、すべてを一つの完全な例にまとめてみましょう:

public class CoffeeShop {
public static void main(String[] args) {
CoffeeSize mySize = CoffeeSize.MEDIUM;

System.out.println("I ordered a " + mySize.getDescription());
System.out.println("This size has an ordinal value of: " + mySize.ordinal());

System.out.println("\nAll available sizes:");
for (CoffeeSize size : CoffeeSize.values()) {
System.out.println(size.getDescription());
}

// Using valueOf
CoffeeSize anotherSize = CoffeeSize.valueOf("LARGE");
System.out.println("\nUsing valueOf: " + anotherSize.getDescription());
}
}

enum CoffeeSize {
SMALL(8),
MEDIUM(12),
LARGE(16);

private final int ounces;

CoffeeSize(int ounces) {
this.ounces = ounces;
}

public int getOunces() {
return ounces;
}

public String getDescription() {
return this.name() + " coffee (" + this.ounces + " oz)";
}
}

出力

このプログラムを実行すると、以下のような出力が表示されます:

I ordered a MEDIUM coffee (12 oz)
This size has an ordinal value of: 1

All available sizes:
SMALL coffee (8 oz)
MEDIUM coffee (12 oz)
LARGE coffee (16 oz)

Using valueOf: LARGE coffee (16 oz)

この例で何が起こっているのかを分解してみましょう:

  1. CoffeeSize変数mySizeを作成し、MEDIUMに設定します。
  2. getDescription()メソッドを使用してmySizeの説明を表示します。
  3. MEDIUMの序数値を表示します。これは1です(序数値は0から始まります)。
  4. for-eachループを使用して、すべてのCoffeeSize値を反復し、その説明を表示します。
  5. 最後に、valueOf()の使用を示して、LARGE列挙定数をその名前で取得します。

それで、完成です!Javaの列挙型の世界に踏み込むための最初の一歩をお持ちしました。彼らは、型安全な方法で固定の定数セットを表現するための強力なツールです。

覚えておいてください、列挙型は単なる華やかる定数以上のものです。彼らにはコンストラクタ、フィールド、およびメソッドがあり、非常に多様な使い方ができます。日曜日、トランプのスート、ピザのサイズ、またはプログラム内の他の固定値のセットを表現するのに最適です。

Javaの旅を続ける中で、列挙型のさらに多くの使用方法を見つけることができます。彼らはJava言語の基本部分であり、それをマスターすることで、より効果的で効率的なプログラマーになることができます。

練習を続け、コードを書き続け、最も重要なのは、学びの過程を楽しむことです。知らずにいつの間にか、簡単に複雑なJavaプログラムを書けるようになります。ハッピーコーディング!

Credits: Image by storyset