2016-12-04 56 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() 

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

相关问题