位运算实现组合选项

在实际开发中常会用到选项,选项开启和关闭可以有效的控制代码执行逻辑。

对于选项,我们可以简单的用类的一个属性去判断。也可以使用一些编程技巧,通过一个数字来表示组合选项。

一个简单的例子如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class ByteOption {

public enum Option {
/*
option
*/
OPTION_1(op1),
OPTION_2(op2),
OPTION_3(op3),
OPTION_4(op4),
OPTION_5(op5),
OPTION_6(op6),
OPTION_7(op7)
;

byte value;

Option(byte i) {
value = i;
}
}
// 将多个属性设置为不冲突的二进制数
public static byte op1 =0b00000001;
public static byte op2 =0b00000010;
public static byte op3 =0b00000100;
public static byte op4 =0b00001000;
public static byte op5 =0b00010000;
public static byte op6 =0b00100000;
public static byte op7 =0b01000000;
private static int ALL = 0b11111111;


private byte op = 0b00000000;

public void enableOption(Option option){
op = (byte) (op | option.value);
}

public void disableOption(Option option){
op = (byte) (op & (option.value^ALL));
}

public boolean isEnable(Option option){
return option.value == (op & option.value);
}
}