假设您有一个枚举方向
enum Direction{
North,South,East West
}
我可以编写一个使用按位或者比较多个枚举的方法
public boolean canGoDirection(Direction dir){
return dir | Direction.North;
}
我将上述方法称为
this.canGoDirection(Direction.South | Direction.North);
答案 0 :(得分:19)
你不能使用bitwise或类似的东西。尝试更像这样的东西:
public boolean canGoDirection(Set<Direction> dirs){
return dirs.contains(Direction.North);
}
这样叫:
this.canGoDirection(EnumSet.of(Direction.South,Direction.North));
答案 1 :(得分:8)
您正在寻找的功能由EnumSet实现。
您的例子可以煮沸为:
final static EnumSet<Direction> ALLOWED_DIRECTIONS =
EnumSet.of( Direction.North, Direction.South );
public boolean canGoDirection(Direction dir){
return ALLOWED_DIRECTIONS.contains( dir );
}
答案 2 :(得分:2)
不是直接的,但是如果您在枚举中添加了一个原语(例如int
)字段,则可以使int
值为OR。
但是,结果值为int
(无法隐式转换为boolean
,更不用说回enum
了。)
或许你最好使用EnumSet
代替。这对Java来说更为惯用。