我可以对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来说更加惯用。