高手绕路
在开发过程中经常需要用到if语法进行逻辑的判断,当特定的业务分支过多时,针对if的分支则会特别的多,且if的都需要对应的分支匹配判断语句,或者使用switch进行分类处理。
如if(a.equals("my name is xiaoming")
从性能、代码整洁上考虑:
在某些场景中,则可以使用类似掩码计算来实现IF的判断。
eg.
比如有一个货物,需要对其运送的地点,分别进行判断,一般的作法,是使用List<String>地点集合,然后遍历匹配,使用if对不同的地点,进行不同的处理。
亦可采用如下示例中的做法:
package com.zte.sunquan.demo.mask;
/**
* Created by XXXX on 2017/3/6.
*/
public class MaskTest {
private int sendPlace = 0;
private static int goNanJing = 1;
private static int goShangHai = 1 << 1;
private static int goBeiJing = 1 << 4;
public void addPlace(int place) {
this.sendPlace = this.sendPlace | place;
}
public void removePlace(int place) {
this.sendPlace = this.sendPlace & ~place;
}
public void print() {
System.out.println("-------------------");
if ((sendPlace & goNanJing) != 0) {
System.out.println("goNanjing");
}
if ((sendPlace & goShangHai) != 0) {
System.out.println("goShangHai");
}
if ((sendPlace & goBeiJing) != 0) {
System.out.println("goBeiJing");
}
}
public static void main(String[] args) {
MaskTest maskTest = new MaskTest();
maskTest.addPlace(goNanJing);
maskTest.print();
maskTest.addPlace(goShangHai);
maskTest.addPlace(goBeiJing);
maskTest.print();
maskTest.removePlace(goBeiJing);
maskTest.print();
}
}
打印结果:
-------------------
goNanjing
-------------------
goNanjing
goShangHai
goBeiJing
-------------------
goNanjing
goShangHai
这种方式说破了,也简单。不过也是开发中重构的一种方式。
总结来说:
增A:|A
删A:&(~A)
判断:&A!=0