首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我是否可以对Java枚举使用按位OR

我是否可以对Java枚举使用按位OR
EN

Stack Overflow用户
提问于 2011-02-11 00:57:15
回答 3查看 9K关注 0票数 17

假设你有一个枚举方向

enum Direction{
    North,South,East West
}

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

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

在这里,我会像这样调用上面的方法

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

回答 3

Stack Overflow用户

回答已采纳

发布于 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));
票数 20
EN

Stack Overflow用户

发布于 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 );
}
票数 9
EN

Stack Overflow用户

发布于 2011-02-11 00:59:26

不是直接的,但是如果你给你的枚举添加一个原语(例如int)字段,你可以对那个int值进行OR运算。

但是,结果值是int (它不能隐式转换为boolean,更不用说返回enum了)。

也许使用EnumSet会更好一些。这对Java来说更加惯用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4960167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档