Java:我可以在枚举中使用两个不同的名称来计算相同的东西吗?

Pit*_*kos 9 java enums namespaces elements equivalent

我有一个带有主要方向的枚举类(北,东,南,西):

public enum Direction {
    NORTH,
    EAST,
    SOUTH,
    WEST;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法能够为同一件事使用多个名字?例如这样的事情:

public enum Direction {
    NORTH or N,
    EAST or E,
    SOUTH or S,
    WEST or W;
}
Run Code Online (Sandbox Code Playgroud)

在实践中我想要的是能够并签署一个变量N或NORTH并使两个操作完全相同.

例:

Direction direction1=new Direction.NORTH;
Direction direction2=new Direction.N;
//direction1==direction2
Run Code Online (Sandbox Code Playgroud)

Mik*_*uel 10

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;
}
Run Code Online (Sandbox Code Playgroud)

是合法的,但"N"不适用于自动生成的valueOf方法.即Direction.valueOf("N")会抛出一个IllegalArgumentException返回代替Direction.NORTH.

你也写不出来case N:.您必须使用switch值为a的es中的全名Direction.

除此之外,缩写形式应该与完整版本一样好.你可以Direction.NEnumSets 中使用,比较它是否相等Direction.N == Direction.NORTH,得到它name()(是"NORTH")import static yourpackage.Direction.N;,等等.


Jus*_*KSU 5

你可以做这样的事情(省略东西方).

public enum Direction {
    NORTH {
        @Override
        Direction getDirection() {
            return NORTH;
        }
    },
    N {
        @Override
        Direction getDirection() {
            return NORTH;
        }
    },
    SOUTH {
        @Override
        Direction getDirection() {
            return SOUTH;
        }
    },
    S {
        @Override
        Direction getDirection() {
            return SOUTH;
        }
    }   ;

    abstract Direction getDirection();
}
Run Code Online (Sandbox Code Playgroud)

那你就可以这样了

public void foo(Direction arg) {
  Direction d = arg.getDirection();
}
Run Code Online (Sandbox Code Playgroud)

然后你将永远只处理NORTH,SOUTH,EAST和WEST.