1. 程式人生 > >effective java——32用EnumSet代替位域

effective java——32用EnumSet代替位域

什麼是位域?為什麼用到它?
先來看一個例子:

public class Test {
public static final byte STYLE_BOLD = 1<<0; // 1
public static final byte STYLE_ITALIC = 1<<1; // 2
public static final byte STYLE_UNDERLINE = 1<<2; // 4
public static final byte STYLE_STRIKETHROUGH = 1<<3; // 6

//Parameter is bitwise OR of zero or more STYLE_ constants
public void applyStyles(int styles) { ... }
}
1
2
3
4
5
6
7
8
9
這種方法讓我們將OR位運算將幾個常量合併在一個集合中,稱作位域。
text.applyStyles(STYLE_BLOD | STYLE_ITATIC)
這種方式有著int列舉的所有缺點,甚至更多

於是我們需要用EnumSet代替位域。

public class Text{
public enum Style{BOLD,ITALIC,UNDERLINE,STRIKETHROUGH}
public void applyStyles(Set<Style> styles){
//實現方案
}
}
1
2
3
4
5
6
只需要客戶端傳入EnumSet即可,EnumSet是一個Enum物件的Set。
text.applyStyles(EnumSet.of(Style.BOLD,Style.ITALIC));