假设您有一个枚举类型Direction
enum Direction{
North,South,East West
}
我能否编写一个方法,使用按位或运算符来比较多个枚举值?
public boolean canGoDirection(Direction dir){
return dir | Direction.North;
}
我将在以下位置调用上述方法:
this.canGoDirection(Direction.South | Direction.North);
假设您有一个枚举类型Direction
enum Direction{
North,South,East West
}
我能否编写一个方法,使用按位或运算符来比较多个枚举值?
public boolean canGoDirection(Direction dir){
return dir | Direction.North;
}
我将在以下位置调用上述方法:
this.canGoDirection(Direction.South | Direction.North);
你不能像那样使用按位或运算符。尝试像这样做:
public boolean canGoDirection(Set<Direction> dirs){
return dirs.contains(Direction.North);
}
这样调用:
this.canGoDirection(EnumSet.of(Direction.South,Direction.North));
final static EnumSet<Direction> ALLOWED_DIRECTIONS =
EnumSet.of( Direction.North, Direction.South );
public boolean canGoDirection(Direction dir){
return ALLOWED_DIRECTIONS.contains( dir );
}
虽然不能直接实现,但是如果您给枚举类型添加一个基本类型(例如int
)字段,您可以对该int
值进行按位或运算。
然而,结果值是int
类型的(它不能隐式转换为boolean
类型,更不用说转换回enum
类型了)。
也许使用EnumSet
会更好。这更符合Java语言的惯用法。
enum
定义为类似于North(1),South(2),East(4),West(8)
这样的东西。 - Oliver Charlesworth
canGoDirection(Direction dir)
的意思,但如果你想要进行检查,应该使用 & 而不是 | 吧? - zardosht