我可以对Java Enums使用按位OR

时间:2011-02-10 16:57:15

标签: java

假设您有一个枚举方向

enum Direction{
    North,South,East West
}

我可以编写一个使用按位或者比较多个枚举的方法

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

我将上述方法称为

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

3 个答案:

答案 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来说更为惯用。