基于多个标志的条件

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)。