java开发小技巧—二进制进阶—状态位

/**
 * 事物同时具有多种状态工具
 * 二进制,每一位代表一种状态,0或1,采用&,|,^ 计算
 */
public class StateUtils {
    public final static long USER_START_STATE=1;//初始状态
    public final static long USER_BASE_INFO_STATE=2<<1;//填写基本信息
    public final static long USER_PHONE_STATE=2<<2;//绑定手机号
    //.....
    
    
    //与:同为1则1
    //是否具有某种状态,states:原有状态,   value:要判断状态
    public static boolean hasState(long states,long value){
        return (states & value)!=0;
    }
    //或,有1则1
    //添加状态,states:原有的状态, value:要添加的状态
    public static long addState(long states,long value){
        if(hasState(states,value)){
            return states;
        }
        return states | value;
    }
    //异或,相同为0,不同为1
    //移除状态,states:原有的状态, value:要移除的状态
    public static long removeState(long states,long value){
        if(!hasState(states,value)){
            return states;
        }
        return states ^ value;
    }
}

你可能感兴趣的:(java开发小技巧—二进制进阶—状态位)