2016-12-04 58 views
0

我,雖然我知道枚舉的一切,但如何做這項工作我雖然我知道枚舉的一切,但如何做這項工作

(感謝Fumihiko Shiroyama的代碼

/** 
* Message Type 
* 
* @author Fumihiko Shiroyama ([email protected]) 
*/ 
public enum MessageType { 
    NORMAL(1 << 7), IMAGE(1 << 8); 

    private int flag; 

    MessageType(int flag) { 
     this.flag = flag; 
    } 

    public int getFlag() { 
     return flag; 
    } 
} 

特別是怎麼做的> >在這裏工作?

+0

這是一個按位左移(代碼中的<< <<)。 '>>'是一個按位右移(而不是在發佈的代碼中)。 –

+0

我知道如何按位移動工作,但不是這樣的目的是什麼 –

+0

它在'int'(每個'MessageType'不同的一個)上設置一個位。大概是創建一個位掩碼。 –

回答

2

它工作在各個領域,因爲消息類型需求(Normal,圖像),在當時是一個常數整數代碼編譯...

只要你編譯,這NORMAL(1 < < 7)將被計算爲NORMAL(128)和該規則不破

哪個規則:在

那些值構造函數必須在編譯時間

0

稱爲消息類型的枚舉類型定義了一個構造函數是常量

MessageType(int flag) { 
    this.flag = flag; 
} 

每枚舉常數(NORMAL,IMAGE)與傳遞的值標誌,它是經過常量被創建時:

NORMAL(1 < < 7) 和 IMAGE(1 < < 8)

後來值標誌可以檢索:

NORMAL.getFlag() 

在此看一看,它也有更多的例子

相關問題