我可以假设Java枚举自动递增1吗?

Fat*_*tso 7 java enumeration ordinal

Java声明初始值的序数为0.我可以假设当我创建这样的枚举时:

public enum Direction {MONDAY, TUESDAY, WEDNESDAY, THURSDAY, ...}
Run Code Online (Sandbox Code Playgroud)

序数TUESDAY总是1,WEDNESDAY总是2,......?


我会更具体一点.我正在宣布一个枚举:

public enum Direction {UP,RIGHT,DOWN,LEFT}
Run Code Online (Sandbox Code Playgroud)

现在有一种方法可以转90度(顺时针).它与序数是一条线:

direction = Direction.values()[direction.ordinal()+1 % Direction.values().length];
Run Code Online (Sandbox Code Playgroud)

如果我不使用序数,我将不得不使用switch语句或条件:

switch (direction) {
    case LEFT:newdirection = Direction.UP;
    break;
  etc...
}
Run Code Online (Sandbox Code Playgroud)

使用序数有几个优点:

  • 更短的代码
  • 更快的代码(可忽略)
  • 如果添加方向(例如DOWN_LEFT),如果将新方向放在正确的位置,则实现不一定必须更改

你怎么看?

ass*_*ias 8

是的 - 请参阅javadoc:

返回此枚举常量的序数(它在枚举声明中的位置,其中初始常量的序数为零).


Mic*_*rdt 7

是的 - 但是你的代码不应该依赖它,因为当有人插入Caturday它会破坏它.

  • 我希望你的老师能做到.这将是一个很好的学习课:) (2认同)