在Java

时间:2016-09-06 23:04:25

标签: java enums

请原谅我,如果这是一个愚蠢的问题,但我想知道Java中的枚举是否与整数类似。我的意思是,说我有一个枚举声明为

public enum Colour {
    BLACK, WHITE
}

我可以按照我在int之间切换的方式在它们之间切换吗?像

Colour newColour = !newColour;

据我所知,它们基本上都是C中的内容。它是否相似?

4 个答案:

答案 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;
    }
}