列挙型に関するいくつかの質問と回答を読んだ後、私はそれが本当に役立つとは思いません...
これはクラスと変数の間の何かですが、どこで使用できるかを知っているので、たとえばクラスやいくつかの変数よりも便利です。
他にもできることとそれらを使用する理由がありますが、私が列挙型を使用する主な理由は、無効なパラメーターの可能性を防ぐことです。たとえば、次の方法を想像してください。
public void doSomethingWithAMonth(int monthNum);
これはあいまいなだけでなく (月のインデックスは 1 から始まりますか、それとも 0 から始まりますか?)、まったく無効なデータ (13+、負の数) を与えることができます。Month
JAN、FEB などの列挙型がある場合、署名は次のようになります。
public void doSomethignWithAMonth(Month month);
このメソッドを呼び出すコードははるかに読みやすくなり、無効なデータを提供できなくなります。
何かの不変の「タイプ」が複数あるものには、列挙型を使用します。つまり、曜日。
この場合にStringを使用しないのは、Stringでswitchステートメントを実行できず、Enumで実行できるため、曜日ごとに特定の処理を実行できるためです。
シングルトンパターンで作業するときも列挙型を使用します。効果的なJavaブックCH2(第2章オブジェクトの作成と破棄)を確認してください。引用:
「このアプローチはまだ広く採用されていませんが、シングルエレメント列挙型はシングルトンを実装するための最良の方法です。」コードを貼り付けるつもりはありませんそれは素晴らしい本を読んでください。
もし私があなたなら、私は最初にJavaの章の列挙型で考えるを読んだでしょう。その後、効果的なJavaの第6章とあなたは良いはずです
最も単純な定義-An enum is just like any other class, with a predefined set of instances.
列挙型の最良の部分は、文字列を使用できないswitchステートメントで使用できることです。
Enumはセーフタイプであるため、実行時に新しい値を割り当てることはできません。
列挙型は、人々がすべきでないことをするのを防ぐのに役立ちます。たとえば、私が持っている場合:
public final static int WEATHER_SUNNY = 0;
public final static int WEATHER_RAINY = 1;
public final static int WEATHER_HAIL = 2;
それから私はすることができます:MyClass.WEATHER_SUNNY + MyClass.WEATHER_HAIL
それは意味がありません。そのため、Weather列挙型を使用することをお勧めします。これにより、コードが読みやすくなり、2つの天気の整数を合計できなくなります。
enum
は、エンティティまたは概念の定義済みリストから選択することをコーダーに強制します。クラスを使用したり、変数を特定の既知の値に設定したりすることで同じ目的を達成できますが、列挙は、値の設定者が選択できるメニューをアドバタイズして強制するため、エラーが発生しにくくなります。
他の回答に加えて、列挙型は固定数のインスタンスしかないクラスであるということを付け加えておきます。これらのインスタンスにはフィールドとメソッドがあり、他のJavaオブジェクトとして使用できます。たとえば、Month
列挙型は次のようなメソッドを定義できます
public int getNumberOfDays(int year);
public boolean isFirstOfYear();
特に、列挙型はシングルトンを作成するのに役立ちます。
「enum」という名前からわかるように、拡張機能を提供する列挙定数に最適です。たとえば、constanNameString、constanNameString、追加のパラメーターなど、いくつかのパラメーターから構成されるいくつかの定数を格納できます。さらに、enum には関数を含めることができます。
enum の特殊な使用法は、シングルトンを作成することです。
Enum は、機能的に重要で有限な値のリストがある場合に役立ちます。
たとえば、曜日を使用する必要があるとします。別の日は追加されず、コードには数字ではなく Day.MONDAY が必要であり、0 は月曜日、1 は火曜日、すぐ。次のようにすると、switch ステートメントも理解しやすくなります。
Switch(day) {
case Monday : ... break;
case Tuesday : ... break
etc.
}