Java 基于多个标志的条件句
我希望重构如下所示的Java代码。a、 b、c和d是布尔标志Java 基于多个标志的条件句,java,refactoring,dry,Java,Refactoring,Dry,我希望重构如下所示的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 &&
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种组合。有更好的办法吗?我考虑了一个以值作为方法引用的映射,但键的形成仍然是一个谜 创建函数数组
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;
index=0;
指数|=a;
索引|=b无论如何,这很奇怪,但是除了a
、b
、c
和d
之外,还有一些更为实质性的代码,这将有助于实现理想的解决方案。您还希望向我们展示您拥有的可能组合和动作链。它可能很长,但如果你在寻找一个解决方案,美国的回答者必须对你的问题有一个坚实的理解。如果没有副作用,你可以使用位掩码。谢谢@Makoto,但组合如我所说:所有16种方式组合4位。0000、0001、0010、0011、0100、0101等,直到1111年。没有理由把这些都打印出来。如果您所说的“操作链”是指与每个组合相关联的特定方法调用中发生的事情,那么与问题无关。