枚举int模式
在枚举类型(enum)还没有引入的时候,也就是在JDK1.5以前,表示枚举类型的常用模式是声明一组具名的int常量。
下面是一个具体的例子,该类表示一段文本(text),该文本具有一些样式,比如加粗,加删除线,加下划线等。
输出:Text Style:-bold-underscore
注意到每个常量值是2的倍数,并且该类型为int,一共有32位。那么以上样式用二进制表示如下:
STYLE_BOLD:
0000 0000 0000 0000 0000 0000 0000 0001
STYLE_ITALIC:
0000 0000 0000 0000 0000 0000 0000 0010
STYLE_UNDERLINE:
0000 0000 0000 0000 0000 0000 0000 0100
STYLE_STRIKE:
0000 0000 0000 0000 0000 0000 0000 1000
假如应用加粗,斜体和下划线样式:
int styles = STYLE_BOLD | STYLE_ITALIC | STYLE_STRIKE
因为 1 | 0 = 1 , 1 | 1 = 1 , 0 | 0 = 0
所以 styles = 0000 0000 0000 0000 0000 0000 0000 1011 // 11
如果想判断该样式是否包含某种样式,则将该样式与具体样式进行&运算。
比如判断是否应用了加粗样式:
0000 0000 0000 0000 0000 0000 0000 1011 & 0000 0000 0000 0000 0000 0000 0000 0001 = 0000 0000 0000 0000 0000 0000 0000 0001
即 styles & STYLE_BOLD != 1 or styles & STYLE_BOLD == STYLE_BOLD
目前应用了枚举int模式的有java.nio.channels.SelectionKey,它的枚举int常量包括(OP_READ,OP_WRITE,OP_ACCEPT,OP_CONNECT),还有android.app.Notification,它的枚举int常量包括(DEFAULT_SOUND,DEFAULT_LIGHTS,DEFAULT_VIBRATE,DEFAULT_ALL)
因为枚举int模式在类型安全性和使用方便性方面没有任何帮助,所以推荐使用枚举类型来代替。