假设你有一个枚举方向
enum Direction{
North,South,East West
}
我是否可以编写一个使用按位或的方法来比较多个枚举
public boolean canGoDirection(Direction dir){
return dir | Direction.North;
}
在这里,我会像这样调用上面的方法
this.canGoDirection(Direction.South | Direction.North);
发布于 2011-02-11 01:01:42
您不能使用按位或类似的方法。尝试更多像这样的东西:
public boolean canGoDirection(Set<Direction> dirs){
return dirs.contains(Direction.North);
}
如下所示:
this.canGoDirection(EnumSet.of(Direction.South,Direction.North));
发布于 2011-02-11 01:03:44
您正在寻找的功能是由EnumSet实现的。
你的例子可以概括为:
final static EnumSet<Direction> ALLOWED_DIRECTIONS =
EnumSet.of( Direction.North, Direction.South );
public boolean canGoDirection(Direction dir){
return ALLOWED_DIRECTIONS.contains( dir );
}
发布于 2011-02-11 00:59:26
不是直接的,但是如果你给你的枚举添加一个原语(例如int
)字段,你可以对那个int
值进行OR运算。
但是,结果值是int
(它不能隐式转换为boolean
,更不用说返回enum
了)。
也许使用EnumSet
会更好一些。这对Java来说更加惯用。
https://stackoverflow.com/questions/4960167
复制相似问题