Java枚举是否有增量运算符++?

是否可以为枚举实现++运算符?

我用枚举处理状态机的当前状态,能够使用++运算符会很好。

你不能“增加”枚举,但你可以得到下一个枚举:

 // MyEnum e; MyEnum next = MyEnum.values()[e.ordinal() + 1]; 

但最好是在枚举上创建一个实例方法。

请注意如何为最后一个枚举实例处理有问题的下一个值,其中没有“下一个”实例:

 public enum MyEnum { Alpha, Bravo, Charlie { @Override public MyEnum next() { return null; // see below for options for this line }; }; public MyEnum next() { // No bounds checking required here, because the last instance overrides return values()[ordinal() + 1]; } } 

所以你可以这样做:

 // MyEnum e; e = e.next(); 

您对实现overidden next()方法的合理选择包括:

  • return null; // there is no "next"
  • return this; // capped at the last instance
  • return values()[0]; // rollover to the first
  • throw new RuntimeException(); // or a subclass like NoSuchElementException

重写该方法可避免生成values()数组以检查其长度的潜在成本。 例如, next()的实现next()其中最后一个实例覆盖它)可能是:

 public MyEnum next() { if (ordinal() == values().length - 1) throw new NoSuchElementException(); return values()[ordinal() + 1]; } 

这里, ordinal()values()都被(通常)调用两次 ,这将比上面的重写版本花费更多。

不.Java不支持任何用户定义类型(包括枚举)的自定义运算符重载。

但是,您可以在枚举类中定义一个返回下一个枚举器的方法。