88

Player タイプ ARCHERWARRIOR、およびがあるシナリオがありsorcererます。
プレーヤー タイプの Player クラスで何を使用すればよいですか?
定数最終静的文字列変数またはEnum ? なぜ?
理由を教えてください。

4

5 に答える 5

146

定数文字列 (またはint値 - 同じことが言えます)を使用するとします。

// Constants for player types
public static final String ARCHER = "Archer";
public static final String WARRIOR = "Warrior";

// Constants for genders
public static final String MALE = "Male";
public static final String FEMALE = "Female";

その後、データのタイプを本当に知らないことになり、コードが正しくない可能性があります。

String playerType = Constants.MALE;

列挙型を使用すると、次のようになります。

// Compile-time error - incompatible types!
PlayerType playerType = Gender.MALE;

同様に、列挙型は制限された値のセットを提供します。

String playerType = "Fred"; // Hang on, that's not one we know about...

PlayerType playerType = "Fred"; // Nope, that doesn't work. Bang!

さらに、Java の列挙型は、それらに関連付けられたより多くの情報を持つことができ、動作を持つこともできます。全体的にはるかに優れています。

于 2012-07-20T08:13:29.480 に答える
18

列挙型は必要な入力セットに制限しますが、定数文字列を使用する場合でも、ロジックの一部ではない他の文字列を使用できます。

これにより、データの入力中に間違いを犯したり、ドメイン外に何かを入力したりするのに役立ち、プログラムの可読性も向上します。

さらに、必要に応じて、列挙型をいつでも文字列として使用できます。ここに参照があります。

于 2012-07-20T08:13:38.717 に答える
7

間違った値を提供することを許可しないことに加えて、マイナーに見えるかもしれない列挙型の別の機能がありますが、私の意見では非常に重要です。最新の IDE は列挙型の値を自動的に提案できますが、文字列定数の可能な値を確実に推測する方法はありません (Intellij IDEA は後者を行いますが、JDK クラスと一般的なライブラリに対してのみ)。これは、新しい API を検討している場合に特に役立ちます。

于 2012-07-20T08:30:31.233 に答える
-1

列挙型定数、またはすべての項目に共通の追加機能が本当に必要な場合にのみ、列挙型を使用することをお勧めします。

これはもちろん、作成しているアプリケーションの種類と、サポートするバージョンとデバイスによって異なります。

その理由は、列挙型はアイテムのインスタンスを割り当てるため、オーバーヘッドが追加されるためです。Androidプラットフォームには最小限の列挙型があり、ほとんどすべての定数が最終的な静的int(View.GONEなど)であることに気付くでしょう。

于 2012-07-20T08:27:05.007 に答える