1. ホーム
  2. java

[解決済み] enumとは何か、なぜ有用なのか?

2022-03-18 06:02:18

質問

今日、このサイトでいくつかの質問を見ていたら、「Space」「Space」「Space」「Space」の3つについて言及されているのを発見しました。 enum シングルトンパターンで使用されている スレッドセーフの利点について。

私はこれまで enum を、私はもう2年以上Javaでプログラミングしています。そしてどうやら、彼らは大きく変わったようです。そして、どうやら彼らは大きく変わったようで、今では自分たちの中で本格的にOOPをサポートしています。

さて、日常的なプログラミングでenumを使う理由や注意点は何でしょうか?

どのように解決するのか?

変数 (特にメソッドのパラメータ) が少数の可能な値のセットから 1 つだけを取ることができる場合は、常に列挙型を使用する必要があります。例えば、型定数(契約状態:"permanent", "temp", "apprentice" )やフラグ("execute now", "defer execution" )のようなものである。

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

ところで、列挙型を使いすぎると、メソッドの処理量が多くなりすぎるかもしれません(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);

はもう無理です。