引言
很多android源码中有一个int flags;定义形式的变量,还有与之相对应的一系列常量,这种flag分类方式应该可以用在任何语言中。
原理
int flags定义包含的flag,可能有多个,这是需求。
而一个int型的值(当然也可以是其他类型,原理一样)在java里表示4 byte也就是32 bit,除去符号位剩下31个标志位可以表示31个单独的flag,他们相或可以生成更多的flags值。
例子
用1进行左移操作可以方便生成不同的flag如下:
public static final int FLAG1= 1<<0;
public static final int FLAG2 = 1<<2;
。。。
public static final int FLAG31 = 1<<31;
相或如
public static final int FLAGa = FLAG3|FLAG5|FLAG8 ;
当需要判断时:
flags = FLAGX1 |FLAGX2;
//若flags的相或item包含FLAGX 则与其相与刚好得到FLAGX
if((flags&FLAGX ) == FLAGX ){
//说明包含FLAGX 属性
}
简单封装成函数:
public boolean hasFeature(int feature){
if((flags&feature) == feature) return true;
return false;
}
网友评论