我有一个相当大的代码块,用来生成/返回搜索结果的数组列表,这些结果是由许多数据源构造的。我被要求包含一个日期限制方法,这样用户就可以基于2个日期字段构建数组。如果填充了其中一个日期字段,假设其名为dateFrom,则数组将返回指定日期之后的数据。类似地,如果填充了dateTo,则它将使用前面的数据填充数组,如果两者都填充,则if显然将根据该范围进行填充。
通过几个简单的嵌套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标签实现的。
干杯
发布于 2011-11-17 13:28:48
我建议将if语句移到另一个方法以减少耦合,然后将setItems移到另一个方法并将getmethod的结果作为参数发送。(如果修改对象的字段会更好)只需伪代码:
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,你可以使用多态性和依赖注入,但在这种情况下,它可能会被夸大…
发布于 2011-11-17 13:32:14
怎么样
if(condition1 || condition2 || condition3 ||condition4){
stuff
}
我是不是遗漏了什么?
https://stackoverflow.com/questions/8167733
复制