减少If语句中的代码重复

时间:2011-11-17 13:18:34

标签: java jsf-2

我有相当大的代码块产生/返回由许多数据源构造的搜索结果的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标记实现。

干杯

2 个答案:

答案 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
}

我错过了什么吗?