多个布尔变量作为函数参数

时间:2016-11-24 11:22:43

标签: java arraylist netbeans boolean

我的代码中有很多布尔变量,我想将它们传递给函数。

public myClass {

         boolean isA, isB, isC, isD, isE, isF, isG;

         // loop to set booleans true or false

         String str = addString(isA, isB, isC, isD, isE, isF, isG);
    }

private String addString(boolean isA, boolean isB, boolean isC, boolean isE, boolean isF, boolean isG) { 
 //code
}

程序的工作方式在任何时候都是2-3个变量。我想避免所有那些布尔值作为参数,所以我正在考虑将真正的布尔值传递给ArrayList,如下:

public myClass {

         boolean isA, isB, isC, isD, isE, isF, isG;

         // loop to set booleans true or false

         ArrayList<boolean> list = new ArrayList();

         if(isA) list.add(isA);
         // same check for every variable

         String str = addString(list);
    }

private String addString(ArrayList<boolean>list) { 
      //code
}

还有更好的方法吗?我想知道每次传递哪个布尔值。

2 个答案:

答案 0 :(得分:1)

您可以传递可变数量的布尔参数,如下所示:

public void yourMethod(boolean .. booleans) {
    // Your code here
    for (boolean b : booleans) {
        // Doing something with each boolean argument
    }

}

你可以这样称呼它:

yourMethod(true, true, false);
yourMethod(true);
yourMethod(false, false, false, false);

答案 1 :(得分:0)

一种选择是Builder设计模式。

https://www.geeksforgeeks.org/builder-design-pattern

TL; DR:

String res = new MyStringBuilder(/* any fixed params */)
    .setA(isA)
    .setB(isB)
    // ...
    .build();

这也可以避免重复使用您不关心的布尔值。如果与您的案子无关,则可以跳过setA,并且默认值(例如false)已经为您提供了理想的结果。这也使代码立即更具可读性,因为setAsetB名称可以显式表示要添加的内容(例如setAddPrefixsetAddHeader,...)