4

列挙型の値を取得するには、スイッチを使用する必要があります。列挙型はこれです:

public enum Compass {      NORTH, SOUTH, EAST, WEST;      }

そして私はこれを(列挙型の外の別のクラスで)行いました:

Compass.values()[0].name()

しかし、本はそれを行う方法は次のとおりであると述べています:

Compass[] comp = {  Compass.NORTH, Compass. SOUTH, Compass.EAST, Compass.WEST  }
comp[0].name();

それらのいずれかが他よりも優れていますか?つまり、列挙型の「オブジェクト」などを作成する方が安定していますか?

4

2 に答える 2

3

Compass.values();値が返される順序を実行すると、値がEnumクラスに書き込まれる順序になります。コードが配列の内容の順序に依存している場合は、例のように独自の配列を作成し、必要な時点で順序を制御することをお勧めします。

NORTHなど、この列挙型の特定の値を取得したいだけの場合はCompass.NORTH.name();、配列を使用するのではなく、単に書き込むことができます。

于 2012-07-24T06:58:49.183 に答える
3

配列を使用せずに列挙値の1つの名前を直接取得するには、次のようにします。

Compass.NORTH.name();

によって返される配列はCompass.values()列挙型が宣言された順序であるため、宣言された順序が気に入らない(そして変更できない)か、他の誰かが順序を変更することを心配しない限り、配列を個別に作成するメリットはありません。 (たとえば、新しい値を挿入します)そしてコードを壊します。

ただし、一般的には、重複を避けたいと考えています。これは、1つではなく2つのものを維持することを意味し、同期が外れやすいためです。誰かがNORTH_EAST、SOUTH_WESTなどを追加した場合は、これらの値に対応するように配列を更新することを忘れないでください。そうしないと、特定の状況でコードが機能しない可能性があります。

于 2012-07-24T07:00:00.117 に答える