我希望重构看起来像这样的Java代码。 a,b,c和d是布尔标志。
if(a && b && c && d) doA();
else if (a && b && c && !d) doB();
else if (a && b && !c && d) doC();
else if (!a && !b && c && d) doD();
等等,适用于所有16种组合。有没有更好的办法?我考虑使用值作为方法参考的Map,但形成键仍然是个谜。
答案 0 :(得分:3)
创建函数数组,
public class FunctionTypes {
public void func() {}
}
.....
FunctionTypes[] functions = new FunctionTypes[] {
new FunctionTypes() {
public void func() { f1(); }
public void f1() {
// handle case #1
}
},
new FunctionTypes() {
public void func() { f2(); }
public void f2() {
// handle case #2
}
},
new FunctionTypes() {
public void func() { f3(); }
public void f3() {
// handle case #3
}
},
new FunctionTypes() {
public void func() { f4(); }
public void f4() {
// handle case #4
}
},
....
};
// invoke case #0
functions[0].func();
// invoke case #1
functions[1].func();
选择索引,使用a,b,c,d中的位
index = 0;
index |= a;
index |= b << 1;
index |= c << 2;
index |= d << 3;
好像他们在计算所有16个案件。或者,您可以从主类继承16个不同的子类,并覆盖每个不同子类中的方法,并使用顶级数组选择这些类的实例。也许实现一个接口可能更好。
我不知道java的地图是否有访问时间O(n * logn)但数组访问是否为O(1)。