Java では、列挙または enum は、定数 (不変の値) のグループ、つまり、時間の経過とともに変化しない固定の値のセットを表す特別なタイプのクラスです。したがって、曜日、月、色など、すべての可能な値がコンパイル時に認識されます。
列挙型はクラスの一種であるため、それを使用するにはインスタンス化する必要があると思われるかもしれませんが、属性、メソッド、コンストラクターなどの通常のクラスと同じ機能を備えていますが、これは必要ありません。インターフェイスを実装する場合でも、考慮すべき点は、列挙型では継承の概念を実装できないことだけです。その主な目的は、独自のデータ型 (列挙型データ型) を定義することです。列挙型の強調表示するいくつかのプロパティは次のとおりです:
列挙型はクラスの内部、外部、または別のファイルで宣言できますが、メソッド内では宣言できません。 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; } }
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 サイトの他の関連記事を参照してください。