9

基本方向(北、東、南、西)の列挙型クラスがあります。

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

同じものに複数の名前を使用できる方法はありますか? たとえば、次のようなものです。

public enum Direction {
    NORTH or N,
    EAST or E,
    SOUTH or S,
    WEST or W;
}

実際には、私が望むのは、N または NORTH のいずれかの変数に署名して、2 つの操作をまったく同じにすることです。

例:

Direction direction1=new Direction.NORTH;
Direction direction2=new Direction.N;
//direction1==direction2
4

3 に答える 3

12
public enum Direction {
  NORTH,
  EAST,
  SOUTH,
  WEST,
  ;

  // Convenience names.
  public static final Direction N = NORTH;
  public static final Direction E = EAST;
  public static final Direction S = SOUTH;
  public static final Direction W = WEST;
}

合法ですが、自動生成されたメソッド"N"では機能しません。valueOfつまり、を返す代わりにDirection.valueOf("N")をスローします。IllegalArgumentExceptionDirection.NORTH

と書くこともできませんcase N:switch値が a である es で完全な名前を使用する必要がありますDirection

それ以外は、省略形は完全版と同じように機能するはずです。s で使用Direction.NEnumSetたり、等しいかどうかを比較したりDirection.N == Direction.NORTH、そのname()(つまり"NORTH")を取得したりできますimport static yourpackage.Direction.N;

于 2011-05-10T22:19:49.623 に答える
0

うーん、実際の「意味のある列挙型」を保持する変数を持つ「クライアント列挙型」を持っているのでしょうか?

public enum Direction {
    NORTH(BaseDirection.NORTH),
    N(BaseDirection.NORTH),
    EAST(BaseDirection.EAST),
    E(BaseDirection.EAST),
    SOUTH(BaseDirection.SOUTH),
    S(BaseDirection.SOUTH),
    WEST(BaseDirection.WEST),
    W(BaseDirection.WEST);

    private BaseDirection baseDirection;

    private Direction(BaseDirection baseDirection) {
        this.baseDirection = baseDirection;
    }

    public BaseDirection getBaseDirection() {
        return baseDirection;
    }           
}

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

ちょっとやり過ぎですが、Direction をクライアント コードに公開してgetBaseDirection、実際のロジックに使用できます。

于 2011-05-10T22:27:16.817 に答える