我有一个枚举,我试图从数据库的长值初始化。
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;运算符不能用于长值。
我怎样才能正确地做到这一点?
答案 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);
}