请原谅我,如果这是一个愚蠢的问题,但我想知道Java中的枚举是否与整数类似。我的意思是,说我有一个枚举声明为
public enum Colour {
BLACK, WHITE
}
我可以按照我在int之间切换的方式在它们之间切换吗?像
Colour newColour = !newColour;
据我所知,它们基本上都是C中的内容。它是否相似?
答案 0 :(得分:6)
当然,您可以通过在枚举中定义toggle
方法来实现相同的行为:
enum Colour {
BLACK, WHITE;
Colour toggle() {
if (this.equals(BLACK))
return WHITE;
else
return BLACK;
}
}
用法是:Colour newColour = oldColour.toggle();
答案 1 :(得分:3)
你可以做这样的事情,以支持你喜欢的颜色。这样,在返回补码的方法中没有分支逻辑。
public enum Colour {
BLACK(null), WHITE(BLACK), RED(null), CYAN(RED);
private Colour complement;
private Colour(Colour complement) {
this.complement = complement;
if (complement != null) {
complement.complement = this;
}
}
public Colour getComplement() {
return complement;
}
}
答案 2 :(得分:2)
与@ alfasin的解决方案类似,但更符合您的问题:
public enum Colour {
BLACK, WHITE;
public Colour toggle() {
return values()[~ordinal() & 1];
}
}
答案 3 :(得分:0)
这是一个更短的版本:
private enum Colour {
WHITE, BLACK;
public Colour toggleMode() {
return this.equals(WHITE) ? BLACK: WHITE;
}
}