ホームページ > Java > &#&チュートリアル > Javaの列挙型とは何ですか?

Javaの列挙型とは何ですか?

Mary-Kate Olsen
リリース: 2025-01-03 00:17:08
オリジナル
163 人が閲覧しました

¿Qué son los enums en Java?

Java では、列挙または enum は、定数 (不変の値) のグループ、つまり、時間の経過とともに変化しない固定の値のセットを表す特別なタイプのクラスです。したがって、曜日、月、色など、すべての可能な値がコンパイル時に認識されます。

列挙型はクラスの一種であるため、それを使用するにはインスタンス化する必要があると思われるかもしれませんが、属性、メソッド、コンストラクターなどの通常のクラスと同じ機能を備えていますが、これは必要ありません。インターフェイスを実装する場合でも、考慮すべき点は、列挙型では継承の概念を実装できないことだけです。その主な目的は、独自のデータ型 (列挙型データ型) を定義することです。列挙型の強調表示するいくつかのプロパティは次のとおりです:

  • 各列挙型は、内部的にはクラス型を使用してクラスとして実装されます。
  • 列挙型の各定数は、列挙型のオブジェクトを表します。
  • クラスは親からのみ拡張でき、列挙型は別のクラスから拡張できないため、すべての列挙型は暗黙的に java.lang.Enum を拡張します。
  • 列挙型の各定数は、暗黙的に public static Final 型になります。
  • スイッチなどの制御構造で使用できます。
  • main() メソッドは列挙型内で宣言できます。
  • toString() メソッドは、定数の名前を返すようにオーバーライドされます。

列挙型の宣言

列挙型はクラスの内部、外部、または別のファイルで宣言できますが、メソッド内では宣言できません。 enum を宣言する構文は次のとおりです:

enum NombreEnum {
    CONSTANTE1, CONSTANTE2, CONSTANTE3, ...
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

慣例により、列挙型の定数は大文字で書かれます。
通常、列挙型の最初の行は定数の宣言であり、必要に応じて属性、メソッド、コンストラクターが続きます。

// Enum declarado fuera de una clase
enum Color {
    RED, GREEN, BLUE;
}

public class Main {
    public static void main(String[] args) {}
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
// Enum declarado dentro de una clase
public class Main {
    public static void main(String[] args) {}

    enum Color {
        RED, GREEN, BLUE;
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

列挙型の定数にアクセスするには、列挙型の名前の後にピリオドと定数の名前を続けるだけです。

Color color = Color.RED;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

それほど必要ではないかもしれませんが、宣言されたとおりの定数の名前を取得する必要がある場合は、name() メソッドを使用できます。ただし、必要に応じて toString() メソッドによって省略される場合もあります。もっと説明的なもの。

System.out.println(Color.RED.name()); // RED
System.out.println(Color.RED); // RED
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

列挙型から定数を取得する

values() メソッドを使用して、列挙型のすべての定数を取得できます。このメソッドは、すべての定数を含む配列を返します。

enum NombreEnum {
    CONSTANTE1, CONSTANTE2, CONSTANTE3, ...
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

定数を入力として受け取るか、ファイルまたはデータベースから取得するため、名前に基づいて定数を取得する必要がある場合は、valueOf() メソッドを使用できます。これは次のことを考慮する必要があります。メソッドでは大文字と小文字が区別されるため、名前がどの定数にも一致しない場合は、IllegalArgumentException がスローされます。

// Enum declarado fuera de una clase
enum Color {
    RED, GREEN, BLUE;
}

public class Main {
    public static void main(String[] args) {}
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

前に、すべての定数を配列として取得する方法を説明しました。そのため、定数のインデックスを取得できるのではないかと考えているかもしれません。答えは「はい」です。ordinal() メソッドを使用して取得できます。定数のインデックス。配列のインデックスは 0 から始まります。

// Enum declarado dentro de una clase
public class Main {
    public static void main(String[] args) {}

    enum Color {
        RED, GREEN, BLUE;
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

スイッチで列挙型を使用する

列挙型を使用する利点の 1 つは、列挙型をスイッチ制御構造で使用できることです。これにより、コードが簡素化され、読みやすくなります。

Color color = Color.RED;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

列挙型の属性とコンストラクター

通常のクラスと同様に、列挙型の各定数にはカスタム属性を含めることができます。属性を初期化するコンストラクターが必要であることのみを考慮する必要があります。このようにして、定数をロードするときに、次のようになります。対応するコンストラクターが暗黙的に呼び出されます。宣言では各定数が enum 型のオブジェクトであることがわかっているので、コンストラクターに従って属性の値を渡す必要があります。

System.out.println(Color.RED.name()); // RED
System.out.println(Color.RED); // RED
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この列挙型には、すべての定数に共通のコード属性に加えて、名前、レベル、説明の 3 つの属性を持つ 3 つの定数がありますが、コンストラクターで初期化する必要はありません。定数値。各属性には異なるアクセス修飾子を指定できますが、それはすべてニーズに応じて異なります。

列挙型内のメソッド

前の例を考慮すると、各属性はプライベート型であるため、それらにアクセスする方法が必要であると推測できます。そのため、各属性のゲッター メソッドを宣言できます。

Color[] colors = Color.values();

for (Color color : colors) {
    System.out.println(color);
}
ログイン後にコピー

列挙型でユーティリティ メソッドを宣言することもできます。たとえば、レベルに基づいて定数を取得できるメソッドなどです。 enum をインスタンス化できないため、メソッドは静的でなければならないことを考慮する必要があります。

enum NombreEnum {
    CONSTANTE1, CONSTANTE2, CONSTANTE3, ...
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

列挙型の抽象メソッド

列挙型でメソッドを実装する方法はすでに見てきましたが、各定数でメソッドを異なる方法で実装する必要がある場合は、抽象メソッドを宣言し、各定数がそれを独自の方法で実装する必要があります。この構文を考慮すると、定数の宣言が少し変わります。たとえば、コンソールを通じて各定数の権限を出力する抽象メソッド showPermissions() を宣言してみましょう。

// Enum declarado fuera de una clase
enum Color {
    RED, GREEN, BLUE;
}

public class Main {
    public static void main(String[] args) {}
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

列挙型のインターフェイス

列挙型は、通常のクラスと同じ方法で 1 つ以上のインターフェースを実装できます。インターフェースをカンマで区切ることのみが必要です。

// Enum declarado dentro de una clase
public class Main {
    public static void main(String[] args) {}

    enum Color {
        RED, GREEN, BLUE;
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

EnumSet と EnumMap

Java には、enum を操作するための 2 つのクラス、EnumSet および EnumMap が用意されています。これらは enum を操作するように設計されているため、それぞれ HashSet クラスおよび HashMap クラスよりも効率的です。 EnumSet は列挙型の一意の要素のコレクションですが、EnumMap は列挙型をキーとして使用する Map の実装です。

Color color = Color.RED;
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

完全な例

列挙型のさまざまな特性をすでに見てきました。次に、それらすべてを利用する例を見てみましょう。

System.out.println(Color.RED.name()); // RED
System.out.println(Color.RED); // RED
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

結論

列挙型は Java で非常に便利な機能です。列挙型を使用すると独自のデータ型を定義できるため、コードが読みやすく保守しやすくなり、定数をより効率的に操作できるようになります。これは新しい機能ではありませんが、多くの場合、コードを簡素化するのに役立つため、この機能について理解し、使用方法を知ることが重要です。

以上がJavaの列挙型とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート