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不支持任何用户定义类型(包括枚举)的自定义运算符重载。
但是,您可以在枚举类中定义一个返回下一个枚举器的方法。