17 Stimmen

Kann ich bitweises OR für Java Enums verwenden?

Angenommen, Sie haben eine Aufzählung Direction

enum Direction{
    North,South,East West
}

Könnte ich eine Methode schreiben, die bitweise oder's verwendet, um mehrere Enums zu vergleichen

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

wo ich die obige Methode wie folgt aufrufen würde

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

20voto

Dave L. Punkte 42559

Sie können kein bitweises oder ähnliches verwenden. Versuchen Sie eher so etwas wie dies:

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

so genannt:

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

9voto

Alexander Pogrebnyak Punkte 43705

Die Funktionalität, die Sie suchen, wird von EnumSet implementiert.

Ihr Beispiel lässt sich auf einen Nenner bringen:

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

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

2voto

Péter Török Punkte 111735

Nicht direkt, aber wenn Sie ein Primitiv hinzufügen (z. B. int ) zu Ihrer Aufzählung hinzufügen, können Sie ODER, dass int Wert.

Der resultierende Wert ist jedoch von int (die nicht implizit in boolean und schon gar nicht zurück zu enum ).

Wahrscheinlich wäre es besser, wenn Sie eine EnumSet stattdessen. Dies ist für Java viel idiomatischer.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X