首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中有没有一种按位或枚举的方法?

在Java中有没有一种按位或枚举的方法?
EN

Stack Overflow用户
提问于 2011-06-09 01:15:07
回答 9查看 18.7K关注 0票数 31

我使用的是状态机,在针对大量可能的状态进行测试时,代码变得非常冗长。

代码语言:javascript
复制
enum Mood {
    HAPPY, SAD, CALM, SLEEPY, OPTIMISTIC, PENSIVE, ENERGETIC;
}

有没有办法做到这一点:

代码语言:javascript
复制
if (currentMood == (HAPPY | OPTIMISTIC | ENERGETIC) {}

而不是这样:

代码语言:javascript
复制
if (currentMood == HAPPY || currentMood == OPTIMISTIC || currentMood == ENERGETIC) {}

或者在这种情况下使用整数和标志会更好?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-06-09 01:19:49

也许使用像EnumSet这样的东西

代码语言:javascript
复制
if (EnumSet<Mood>.of(HAPPY, OPTIMISTIC, ENERGETIC).contains(currentMood))
{ 
 //Do stuff...
}
票数 42
EN

Stack Overflow用户

发布于 2011-06-09 01:28:24

给你的枚举一个int属性。

代码语言:javascript
复制
enum Mood {
    private int id;

    HAPPY(1), SAD(2), CALM(4), SLEEPY(8), OPTIMISTIC(16), PENSIVE(32), ENERGETIC(64);

    Mood( int id ) {
        this.id = id;
    }
}

在if上,针对此属性进行测试。

代码语言:javascript
复制
if ( currentMood & ( HAPPY.id | OPTIMISTIC.id | ENERGETIC.id ) != 0 ) { ... }
票数 18
EN

Stack Overflow用户

发布于 2011-06-09 01:35:07

除了其他答案:如果特定的状态集在您的应用程序中具有语义定义的含义(相当独立于您的特定方法,特定于Enum),我建议将该测试作为一个方法包含在同一个Enum类中。

代码语言:javascript
复制
enum Mood {
     HAPPY, SAD...

     public boolean isRatherPositive() {
       ....
     }

}

(或静态方法)由其他答案建议的任何逻辑实现(我更喜欢EnumSet,它可以静态地或惰性地实例化)。

将方法放在Enum中对于避免代码重复很有用,但最重要的是,在向Enum添加成员或修改它的情况下防止but。

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

https://stackoverflow.com/questions/6282619

复制
相关文章

相似问题

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