基于多个标志的条件
Conditionals Based On Several Flags
我想重构 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,但形成键仍然是个谜。
创建函数数组,
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();
到select索引,使用a、b、c、d中的位
index = 0;
index |= a;
index |= b << 1;
index |= c << 2;
index |= d << 3;
好像他们正在统计所有 16 个案例。或者,您可以从主 class 继承 16 个不同的子 classes,并在这些 classes 的每个不同子 class 和 select 实例中重写一个方法,使用顶部 class 数组。也许实现一个接口会更好。
我不知道 java 的地图是否有访问时间 O(n*logn) 但数组访问是 O(1)。
我想重构 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,但形成键仍然是个谜。
创建函数数组,
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();
到select索引,使用a、b、c、d中的位
index = 0;
index |= a;
index |= b << 1;
index |= c << 2;
index |= d << 3;
好像他们正在统计所有 16 个案例。或者,您可以从主 class 继承 16 个不同的子 classes,并在这些 classes 的每个不同子 class 和 select 实例中重写一个方法,使用顶部 class 数组。也许实现一个接口会更好。
我不知道 java 的地图是否有访问时间 O(n*logn) 但数组访问是 O(1)。