Подтвердить что ты не робот

Могу ли я использовать побитовое ИЛИ для Java Enums

Предположим, что у вас есть указатель перечисления

enum Direction{
    North,South,East West
}

Могу ли я написать метод, который использует поразрядные или для сравнения нескольких перечислений

public boolean canGoDirection(Direction dir){
     return dir | Direction.North;
}

где я бы назвал вышеуказанный метод как

this.canGoDirection(Direction.South | Direction.North);
4b9b3361

Ответ 1

Вы не можете использовать поразрядное или подобное. Попробуйте еще что-нибудь подобное:

public boolean canGoDirection(Set<Direction> dirs){
     return dirs.contains(Direction.North);
}

называется так:

this.canGoDirection(EnumSet.of(Direction.South,Direction.North));

Ответ 2

Функциональность, которую вы ищете, реализована EnumSet.

Ваш пример можно отварить до:

final static EnumSet<Direction> ALLOWED_DIRECTIONS =
    EnumSet.of( Direction.North, Direction.South );

public boolean canGoDirection(Direction dir){
     return ALLOWED_DIRECTIONS.contains( dir );
}

Ответ 3

Не напрямую, но если вы добавите в свое перечисление примитивное поле (например, int), вы можете ИЛИ, что int значение.

Однако результирующее значение имеет значение int (которое не может быть неявно преобразовано в boolean, а тем более обратно к enum).

Вероятно, вам лучше использовать EnumSet. Это гораздо более идиоматично для Java.