列挙型とは何ですか?なぜ便利なのですか?質問する

列挙型とは何ですか?なぜ便利なのですか?質問する

今日、このサイトのいくつかの質問を閲覧していたところ、列挙型について言及されているのを見つけました。 シングルトンパターンで使用されているこのようなソリューションのスレッドセーフティの利点について。

私はこれまで 2 年以上 Java でプログラミングしてきましたが、列挙型を使ったことはありません。そして、どうやら列挙型は大きく変化したようです。今では列挙型自体も OOP を全面的にサポートしています。

では、日常のプログラミングで enum をなぜ、また何に使用すべきなのでしょうか?

ベストアンサー1

変数 (特にメソッド パラメータ) が少数の可能な値セットから 1 つだけを取得できる場合は、常に列挙型を使用する必要があります。例としては、型定数 (契約ステータス: 「永続」、「一時」、「見習い」) やフラグ (「今すぐ実行」、「実行の延期」) などがあります。

整数 (または文字列コード) の代わりに列挙型を使用すると、コンパイル時のチェックが強化され、無効な定数を渡すことによって発生するエラーが回避され、どの値が有効に使用できるかが文書化されます。

ちなみに、列挙型を過度に使用すると、メソッドが多くの処理を実行する可能性があります (多くの場合、複数のフラグを取って処理内容を変更する 1 つのメソッドよりも、複数の個別のメソッドを使用する方が適しています)。ただし、フラグや型コードを使用する必要がある場合は、列挙型を使用するのが最善です。

たとえば、どちらが良いでしょうか?

/** Counts number of foobangs.
 * @param type Type of foobangs to count. Can be 1=green foobangs,
 * 2=wrinkled foobangs, 3=sweet foobangs, 0=all types.
 * @return number of foobangs of type
 */
public int countFoobangs(int type)

/** Types of foobangs. */
public enum FB_TYPE {
 GREEN, WRINKLED, SWEET, 
 /** special type for all types combined */
 ALL;
}

/** Counts number of foobangs.
 * @param type Type of foobangs to count
 * @return number of foobangs of type
 */
public int countFoobangs(FB_TYPE type)

次のようなメソッド呼び出し:

int sweetFoobangCount = countFoobangs(3);

すると次のようになります:

int sweetFoobangCount = countFoobangs(FB_TYPE.SWEET);

2番目の例では、どの型が許可されているかがすぐにわかり、ドキュメントと実装が同期していないことはなく、コンパイラがこれを強制できます。また、次のような無効な呼び出しは、

int sweetFoobangCount = countFoobangs(99);

もはや不可能です。

おすすめ記事