我有一個枚舉,我試圖從一個來自數據庫的長整型值進行初始化。基於長值設置枚舉集
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;
}
}
我得到一個編譯錯誤稱&運營商不能長期價值被使用。
我該如何正確地做到這一點呢?
錯誤應該是'運算符&不能應用於long,boolean'的東西。對於'&'''&''而言,優先級大概是相同的(我不能,也不想記住)奇數組合的優先級。閱讀'&&',問題相對比較明顯。 – 2012-01-29 21:55:25
這是因爲運算符的優先級,!=高於按位&,所以你很早!= 0首先評估爲布爾值,然後用val來判斷是否非法 – wmz 2012-01-29 21:56:47
&的優先級高於&&;請參閱http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html – DNA 2012-01-29 21:58:42