Javaの列挙型
Javaでは、 列挙型または Java Enum プログラミング言語で名前付き定数のグループを表す目的を果たします。 Java Enum は、メニューでの選択、丸めモード、コマンドライン フラグなど、コンパイル時に考えられるすべての値がわかっている場合に使用されます。 enum 型の定数のセットは、常に固定しておく必要はありません。
Java の列挙または Enum とは何ですか?
Java 列挙型はクラス型です。を使用して列挙型をインスタンス化する必要はありませんが、 新しい、 他のクラスと同じ機能があります。この事実により、Java 列挙は非常に強力なツールになります。クラスと同様に、コンストラクターを指定したり、インスタンス変数やメソッドを追加したり、インターフェイスを実装したりすることもできます。
列挙型の例:
トランプの 4 つのスートは、スートという名前の列挙型に属する、クラブ、ダイヤモンド、ハート、スペードという名前の 4 つの列挙子です。他の例には、自然な列挙型 (惑星、曜日、色、方向など) が含まれます。
留意すべき点の 1 つは、クラスとは異なり、列挙型は他のクラスを継承することも、拡張することも (つまり、スーパークラスになることも) できないことです。変数、メソッド、コンストラクターを追加することもできます。 enum の主な目的は、独自のデータ型 (列挙型データ型) を定義することです。
Javaでのenumの宣言
Enum 宣言はクラスの外部またはクラス内で実行できますが、メソッド内では実行できません。
1. 授業外での宣言
ジャワ
// A simple enum example where enum is declared> // outside any class (Note enum keyword instead of> // class keyword)> enum> Color {> > RED,> > GREEN,> > BLUE;> }> public> class> Test {> > // Driver method> > public> static> void> main(String[] args)> > {> > Color c1 = Color.RED;> > System.out.println(c1);> > }> }> |
出力
RED
2. クラス内での宣言
ジャワ
// enum declaration inside a class.> public> class> Test {> > enum> Color {> > RED,> > GREEN,> > BLUE;> > }> > // Driver method> > public> static> void> main(String[] args)> > {> > Color c1 = Color.RED;> > System.out.println(c1);> > }> }> |
出力
RED
- enum 内の最初の行は定数のリストであり、その後にメソッド、変数、コンストラクターなどのその他のものが続きます。
- によると Java の命名規則 定数の名前はすべて大文字にすることをお勧めします。
JavaのEnumのプロパティ
以下に示すように、特定のプロパティの後に Enum が続きます。
- すべての列挙型は、クラスを使用して内部的に実装されます。
- すべての enum 定数は、 物体 列挙型。
- Enum 型を引数として渡すことができます。 スイッチ 発言。
- すべての enum 定数は常に暗黙的に パブリック静的最終 。ですので 静的 、列挙型の名前を使用してアクセスできます。ですので 最後の 、子の列挙型を作成することはできません。
- 宣言できるのは、 main() メソッド 列挙型の内部。したがって、コマンド プロンプトから直接列挙型を呼び出すことができます。
以下は上記のプロパティの実装です。
ジャワ
// A Java program to demonstrate working on enum> // in switch case (Filename Test. Java)> import> java.util.Scanner;> // An Enum class> enum> Day {> > SUNDAY,> > MONDAY,> > TUESDAY,> > WEDNESDAY,> > THURSDAY,> > FRIDAY,> > SATURDAY;> }> // Driver class that contains an object of 'day' and> // main().> public> class> Test {> > Day day;> > // Constructor> > public> Test(Day day) {> this> .day = day; }> > // Prints a line about Day using switch> > public> void> dayIsLike()> > {> > switch> (day) {> > case> MONDAY:> > System.out.println(> 'Mondays are bad.'> );> > break> ;> > case> FRIDAY:> > System.out.println(> 'Fridays are better.'> );> > break> ;> > case> SATURDAY:> > case> SUNDAY:> > System.out.println(> 'Weekends are best.'> );> > break> ;> > default> :> > System.out.println(> 'Midweek days are so-so.'> );> > break> ;> > }> > }> > // Driver method> > public> static> void> main(String[] args)> > {> > String str => 'MONDAY'> ;> > Test t1 => new> Test(Day.valueOf(str));> > t1.dayIsLike();> > }> }> |
出力
Mondays are bad.
Java Enum プログラム
1. Enum内の主な関数
コマンド プロンプトから直接 enum を呼び出すことができるため、enum 内で main 関数を宣言できます。
以下は上記のプロパティの実装です。
ジャワ
// A Java program to demonstrate that we can have> // main() inside enum class.> enum> Color {> > RED,> > GREEN,> > BLUE;> > // Driver method> > public> static> void> main(String[] args)> > {> > Color c1 = Color.RED;> > System.out.println(c1);> > }> }> |
出力
RED
2.列挙型をループする
value() とループを使用して Enum を反復処理できます。 value() 関数は、値を反復処理できる定数として Enum 値の配列を返します。
以下は Enum によるループの実装です。
ジャワ
// Java Program to Print all the values> // inside the enum using for loop> import> java.io.*;> // Enum Declared> enum> Color {> > RED,> > GREEN,> > BLUE;> }> // Driver Class> class> GFG {> > // Main Function> > public> static> void> main(String[] args)> > {> > // Iterating over all the values in> > // enum using for loop> > for> (Color var_1 : Color.values()) {> > System.out.println(var_1);> > }> > }> }> |
出力
RED GREEN BLUE
3. Switch ステートメント内の列挙型
ジャワ
// Java Program to implement> // Enum in a Switch Statement> import> java.io.*;> // Driver Class> class> GFG {> > // Enum Declared> > enum> Color {> > RED,> > GREEN,> > BLUE,> > Yellow;> > }> > // Main Function> > public> static> void> main(String[] args)> > {> > Color var_1=Color.Yellow;> > > // Switch case with Enum> > switch> (var_1){> > case> RED:> > System.out.println(> 'Red color observed'> );> > break> ;> > case> GREEN:> > System.out.println(> 'Green color observed'> );> > break> ;> > case> BLUE:> > System.out.println(> 'Blue color observed'> );> > default> :> > System.out.println(> 'Other color observed'> );> > }> > }> }> |
出力
Other color observed
列挙型と継承
- すべての列挙型は暗黙的に拡張されます java.lang.Enum クラス 。クラスは拡張することしかできないので、 1つ Java の親である enum は他のものを拡張できません。
- toString() メソッド でオーバーライドされます java.lang.Enum クラス 、列挙定数名を返します。
- enum は多くのインターフェイスを実装できます。
列挙型とコンストラクター
- Enum にはコンストラクターを含めることができ、コンストラクターは enum クラスのロード時に enum 定数ごとに個別に実行されます。
- enum オブジェクトを明示的に作成できないため、enum コンストラクターを直接呼び出すことはできません。
列挙型とメソッド
列挙型には両方を含めることができます コンクリート 方法と 抽象的な メソッド。 enum クラスに抽象メソッドがある場合、enum クラスの各インスタンスはそれを実装する必要があります。
ジャワ
// Java program to demonstrate that enums can have> // constructor and concrete methods.> // An enum (Note enum keyword inplace of class keyword)> enum> Color {> > RED,> > GREEN,> > BLUE;> > // enum constructor called separately for each> > // constant> > private> Color()> > {> > System.out.println(> 'Constructor called for : '> > +> this> .toString());> > }> > public> void> colorInfo()> > {> > System.out.println(> 'Universal Color'> );> > }> }> public> class> Test {> > // Driver method> > public> static> void> main(String[] args)> > {> > Color c1 = Color.RED;> > System.out.println(c1);> > c1.colorInfo();> > }> }> |
出力
Constructor called for : RED Constructor called for : GREEN Constructor called for : BLUE RED Universal Color
Java の Enum に関する FAQ
Q1. newキーワードでEnumのインスタンスを作成できますか?
年:
いいえ、Enum キーワードのインスタンスはプライベート コンストラクターのみを含むため、作成できません。
Q2. Enum に抽象メソッドを含めることはできますか?
年:
はい、Enum には抽象メソッドがあります。
Q3. enum の value() メソッドの目的は何ですか?
年:
Java では、values() メソッドを使用して、列挙型内に存在するすべての値を返すことができます。
Q4. enum の valueOf() メソッドの目的は何ですか?
年:
valueOf() メソッドは、指定された文字列値の enum 定数が存在する場合はそれを返します。
Q5. enum の ordinal() メソッドの目的は何ですか?
年:
ordinal() メソッドを使用すると、配列インデックスと同様に、各 enum 定数インデックスを見つけることができます。
Q6. enum での value()、valueOf()、および ordinal() メソッドの使用を記述するプログラムを Java で作成します。
年:
出力ジャワ
// Java program to demonstrate working of values(),>// ordinal() and valueOf()>enum>Color {>>RED,>>GREEN,>>BLUE;>}>public>class>Test {>>public>static>void>main(String[] args)>>{>>// Calling values()>>Color arr[] = Color.values();>>// enum with loop>>for>(Color col : arr) {>>// Calling ordinal() to find index>>// of color.>>System.out.println(col +>' at index '>>+ col.ordinal());>>}>>// Using valueOf(). Returns an object of>>// Color with given constant.>>// Uncommenting second line causes exception>>// IllegalArgumentException>>System.out.println(Color.valueOf(>'RED'>));>>// System.out.println(Color.valueOf('WHITE'));>>}>}>
RED at index 0 GREEN at index 1 BLUE at index 2 RED
enum に関する次の記事: Java でカスタマイズされた値を含む列挙型