基于long值设置枚举集

时间:2012-01-29 21:43:38

标签: java enumeration

我有一个枚举,我试图从数据库的长值初始化。

public enum ArticlePermission {
   NONE(0),
   CAN_READ(2),
   CAN_EDIT(4),
   CAN_DELETE(8),
   CAN_CREATE(16);

   private long _value;

   public ArticlePermission(int val) {
     this._value = val;
   }


   public long getValue() {
     return this._value;
   }


   public EnumSet<ArticlePermission> init(long val) {
     EnumSet<ArticlePermission> es = EnumSet.of(ArticlePermission.NONE);

     for(ArticlePermission p : values()) {
        if(val & p.getValue() != 0) {
          es.add(p);
        }
     }



      return es;
   }

}

我收到编译错误,说&amp;运算符不能用于长值。

我怎样才能正确地做到这一点?

2 个答案:

答案 0 :(得分:4)

或者,如果您确实想要进行逐位比较,则只需要额外的括号:

if((val & getValue()) != 0) {
   // do something
   }

答案 1 :(得分:1)

您的意思是使用&&(逻辑AND)而不是&(按位AND)?对于if条件,您要使用逻辑AND(&amp;&amp;)。

if(val!=0 && p!=null && p.getValue() != 0) {
          es.add(p);
}

对于按位&,您需要以这种方式使用它: -

if((val & p.getValue()) != 0)) {
              es.add(p);
}