Java 减少If语句中的代码重复

Java 减少If语句中的代码重复,java,jsf-2,Java,Jsf 2,我有一个相当大的代码块,它生成/返回由许多数据源构造的搜索结果的arraylist。我被要求包含一个日期限制方法,用户可以根据2个日期字段构建数组。如果填充了这些日期字段中的一个,比如说它被调用的dateFrom,那么数组将返回指定日期之后的数据。类似地,如果填充了dateTo,则它将使用前面的数据填充数组,如果两者都填充,则显然将基于该范围进行填充 使用两个简单的嵌套if语句或switch case,这都很好&很容易做到,但我的问题是,这也意味着我必须重复大量代码。有没有办法防止相同的基本ar

我有一个相当大的代码块,它生成/返回由许多数据源构造的搜索结果的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中&使用@PostContract标记实现


干杯

我建议将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,可以使用多态性和依赖项注入,但在这种情况下可能会有过大的杀伤力…

我建议将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,你们可以使用多态性和依赖注入,但在这种情况下,这可能会有点过分…

怎么样

if(condition1 || condition2 || condition3 ||condition4){
    stuff
}
我错过什么了吗?

怎么样

if(condition1 || condition2 || condition3 ||condition4){
    stuff
}

我遗漏了什么吗?

你的例子很糟糕。所有条件基本相同。这个例子的答案是“摆脱所有条件”。请改进示例以反映真实代码。无论如何,你可以开始研究策略模式。或者“把3个集合方法放在另一个方法中,每次调用这3个而不是全部3个”:戴尔,我的错误,我的psuedo代码是垃圾,我会回来更新它,一旦我写完我的调整。。干杯!你的榜样不好。所有条件基本相同。这个例子的答案是“摆脱所有条件”。请改进示例以反映真实代码。无论如何,你可以开始研究策略模式。或者“把3个集合方法放在另一个方法中,每次调用这3个而不是全部3个”:戴尔,我的错误,我的psuedo代码是垃圾,我会回来更新它,一旦我写完我的调整。。干杯是的,最后还有一个无条件的
else
。所以基本上,这些条件在OP的特定示例中都是不必要的。我猜在OP的真实代码中,
getMethod()
每次都是不同的,但只要OP不改进示例,就不可能给出有效和具体的答案。是的,最后还有一个无条件的
else
。所以基本上,这些条件在OP的特定示例中都是不必要的。我猜在OP的真实代码中,
getMethod()
每次都是不同的,但只要OP不改进示例,就不可能给出有效和具体的答案。