我虽然知道关于Enum的一切,但这是如何工作的

时间:2016-12-04 07:58:34

标签: java enums

我虽然知道关于Enum的一切,但这是如何工作的

(感谢Fumihiko Shiroyama代码

/**
 * Message Type
 *
 * @author Fumihiko Shiroyama (fu.shiroyama@gmail.com)
 */
public enum MessageType {
    NORMAL(1 << 7), IMAGE(1 << 8);

    private int flag;

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

    public int getFlag() {
        return flag;
    }
}

特别是&gt;&gt;在这里工作?

2 个答案:

答案 0 :(得分:2)

它的工作原理是因为 MessageType 在每个字段(NORMAL和IMAGE)中都需要在编译代码时使用一个常量整数...

编译后, NORMAL(1 <&lt; 7)将被计算为 NORMAL(128)且规则未被破坏

哪条规则:

构造函数中的那些值在编译时必须是常量

答案 1 :(得分:0)

名为MessageType的枚举类型定义了一个构造函数

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

对于每个带有传递值标志的枚举常量(NORMAL,IMAGE),在创建常量时传递:

  

正常(1 <&lt; 7)   和   图像(1 <&lt; 8)

稍后可以检索值标志:

NORMAL.getFlag()

看一下这个page,它还有更多的例子