2012-02-20 12 views
1

eclipse 3.7で列挙型のソート値を無効にする方法はありますか?列挙型のエントリの順序に依存しているので、並べ替えるたびに首が壊れます。列挙型フィールド内でソートしないでください

enum X {C,B,A}は、ソートメンバーを打った後にenum X {A,B,C}になります。

+0

もっと明示して、いくつかのコード例を追加できますか? –

+0

Enum.values()は、宣言された順にそれらを返します。これは宣言の順序を変更するコードの書式設定に問題がありますか? – Thomas

+0

ecpliseのコードフォーマッタは、宣言の順序を変更します。無効にしたいものです。 –

答えて

5

のWindows>設定>ジャワ>エディタ>保存アクション>追加 アクション]> [設定]>メンバー>ソートメンバー>選択し

または

"フィールド と列挙型の定数を無視"

ウィンドウ>設定>のJava>コードスタイル>クリーンアップ>編集>コードの整理>メンバー>ソートメンバー>

「をフィールドと列挙型の定数を無視」を選択しかし、あなたが本当にないコードに基づいて必要がありますenumが宣言された順。それは単に間違っている。

+0

しかし、それはコードを整理するのに役立つかもしれません。ですから+1とありがとうございます。 – Gangnus

3

列挙型エントリの順序に依存しないでください。これは対処するよりも多くのバグを引き起こします。

列挙型の順序に依存するようにコーディングすると、enumクラスのordinal()関数(intを返す)を暗黙的に呼び出しています。これには以下の欠点があります。

  1. これはメンテナンスの悪夢です。誰か他の人(または日食)があなたの列挙を並べ替えるならば、あなたの全体のプログラムはインパクトのために見直される必要があります。
  2. 同じint値を持つ複数の列挙型を追加することはできません。
  3. 適切な関数に対応しないダミーの列挙型を挿入して、希望のordinal()戻り値に到達する必要があります。
  4. 序数マッピングを破ることなくリスト内の任意のポイントに列挙を挿入することはできません。同様に、列挙を削除することもできません。

代わりに、適切にそのような値を含むようにあなたの列挙型を展開します。

public enum Departments { 
    SALES(101), 
    ACCOUNTING(200), 
    MANAGEMENT(300); 

    private final int deptNumber; 

    Departments(int number) { 
    deptNumber = number; 
    } 

    public int departmentNumber() { 
    return deptNumber; 
    } 
} 
2

私は位置依存コードに頼っているのは良い考えだとは思わない。 EnumsはJavaのクラスと考えることができるので、あなたは特定のIDを定義しないでください。

enum Enum 
{ 
    A(0), 
    B(1), 
    C(2); 

    public final int id; 
    Enum(int id) { this.id = id; }; 
} 

これはずっと安全です。

関連する問題