今日、このサイトのいくつかの質問を閲覧していたところ、列挙型について言及されているのを見つけました。 シングルトンパターンで使用されているこのようなソリューションのスレッドセーフティの利点について。
私はこれまで 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);
もはや不可能です。