我可以对Java Enums使用按位OR

假设你有一个枚举方向

enum Direction{ North,South,East West } 

我可以编写一个使用bitwise或to来比较多个枚举的方法

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

我将上述方法称为

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

你不能使用bitwise或类似的东西。 尝试更像这样的东西:

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

像这样叫:

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

您正在寻找的function由EnumSet实现。

您的示例可以煮沸为:

 final static EnumSet ALLOWED_DIRECTIONS = EnumSet.of( Direction.North, Direction.South ); public boolean canGoDirection(Direction dir){ return ALLOWED_DIRECTIONS.contains( dir ); } 

不是直接的,但如果你向你的枚举添加一个原语(例如int )字段,你可以OR那个int值。

但是,结果值是int (不能隐式转换为boolean ,更不用说返回enum )。

可能你会更好地使用EnumSet 。 这对Java来说更加惯用。