我有相当大的代码块产生/返回由许多数据源构造的搜索结果的arraylist。我被要求包含一个日期限制方法,用户可以根据2个日期字段构建数组。如果填充了其中一个日期字段,让我们说它的名称为dateFrom,那么数组将在指定的日期之后返回数据。类似地,如果填充了dateTo,那么它将使用前面的数据填充数组,如果两者都填充,那么显然将基于该范围填充。
这一切都很好&使用几个简单的嵌套if语句或switch case很容易,但我的问题是这也意味着我将不得不重复大量的代码。有没有办法可以阻止相同的基本arraylist构造代码重复4次?我知道这是一个可怕的伪代码,但它得到了我的观点:
if(condition1){
setItem1(getMethod());
setItem2(getMethod());
setItem3(getMethod());
} else if (condition2) {
setItem1(getMethod());
setItem2(getMethod());
setItem3(getMethod());
} else if (condition3) {
setItem1(getMethod());
setItem2(getMethod());
setItem3(getMethod());
} else {
setItem1(getMethod());
setItem2(getMethod());
setItem3(getMethod());
}
return ArrayList();
值得注意的是,尽管这是一个更普遍的Java问题,但我使用的是JSF2框架,这种方法发生在ViewScoped bean&使用@PostContruct标记实现。
干杯
答案 0 :(得分:3)
我建议将if语句移动到另一个方法以减少耦合,然后将setItems移动到另一个方法并将getmethods的结果作为参数发送。 (如果修改对象的字段,则更好) 只是伪代码:
return createArray();
private List createArray()
{
if(condition1){
setItems(getMethod(),getMethod(),getMethod());
return ArrayList();
}
if (condition2) {
setItems(getMethod(),getMethod(),getMethod());
return ArrayList();
}
...
}
private void setItems(Object var1, Object var2, Object var3)
{
...
}
如果你想完全摆脱if,你可以使用多态和依赖注入,但在这种情况下它可能有点过分......
答案 1 :(得分:0)
怎么样
if(condition1 || condition2 || condition3 ||condition4){
stuff
}
我错过了什么吗?