Простите меня, если это глупый вопрос, но мне было интересно, работают ли перечисления в Java аналогично целым числам. Я имею в виду, скажем, у меня было объявлено перечисление как

public enum Colour {
    BLACK, WHITE
}

Смогу ли я переключаться между ними так же, как переключаться между целыми числами? подобно

Colour newColour = !newColour;

Поскольку, насколько мне известно, они в основном являются ints в C. Это вообще похоже?

3
Tejas Sharma 7 Сен 2016 в 02:04

4 ответа

Лучший ответ

Конечно, вы можете добиться того же поведения, определив метод toggle внутри вашего перечисления:

enum Colour {
    BLACK, WHITE;

    Colour toggle() {
        if (this.equals(BLACK))
            return WHITE;
        else
            return BLACK;
    }
}

Использование: Colour newColour = oldColour.toggle();

10
Nir Alfasi 6 Сен 2016 в 23:10

Подобно решению @alfasin, но больше соответствует вашему вопросу:

public enum Colour {
    BLACK, WHITE;

    public Colour toggle() {
        return values()[~ordinal() & 1];
    }
}
2
shmosel 6 Сен 2016 в 23:14

Вы можете сделать что-то вроде этого, чтобы поддерживать столько цветов, сколько захотите. Таким образом, у вас нет логики ветвления внутри метода, возвращающего дополнение.

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;
    }
}
3
Dawood ibn Kareem 6 Сен 2016 в 23:21

Вот еще более короткая версия:

private enum Colour {

    WHITE, BLACK;

    public Colour toggleMode() {
        return this.equals(WHITE) ? BLACK: WHITE;
    }
}
0
vovahost 16 Сен 2017 в 09:58