Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于多个标志的条件句_Java_Refactoring_Dry - Fatal编程技术网

Java 基于多个标志的条件句

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 &&

我希望重构如下所示的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种组合。有更好的办法吗?我考虑了一个以值作为方法引用的映射,但键的形成仍然是一个谜

创建函数数组

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年。没有理由把这些都打印出来。如果您所说的“操作链”是指与每个组合相关联的特定方法调用中发生的事情,那么与问题无关。