我的代码中有很多布尔变量,我想将它们传递给函数。
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
}
还有更好的方法吗?我想知道每次传递哪个布尔值。
答案 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
)已经为您提供了理想的结果。这也使代码立即更具可读性,因为setA
或setB
名称可以显式表示要添加的内容(例如setAddPrefix
,setAddHeader
,...)