首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >减少If语句中的代码重复

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

Stack Overflow用户
提问于 2011-11-17 21:18:34
回答 2查看 490关注 0票数 0

我有一个相当大的代码块,用来生成/返回搜索结果的数组列表,这些结果是由许多数据源构造的。我被要求包含一个日期限制方法,这样用户就可以基于2个日期字段构建数组。如果填充了其中一个日期字段,假设其名为dateFrom,则数组将返回指定日期之后的数据。类似地,如果填充了dateTo,则它将使用前面的数据填充数组,如果两者都填充,则if显然将根据该范围进行填充。

通过几个简单的嵌套if语句或switch case,这一切都很好&很容易做到,但我的问题是,这也意味着我将不得不重复大量代码。有没有办法防止相同的基本arraylist构造代码被重复4次?我知道这是个可怕的伪代码,但它让我明白了:

代码语言:javascript
代码运行次数:0
运行
复制
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标签实现的。

干杯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-17 21:28:48

我建议将if语句移到另一个方法以减少耦合,然后将setItems移到另一个方法并将getmethod的结果作为参数发送。(如果修改对象的字段会更好)只需伪代码:

代码语言:javascript
代码运行次数:0
运行
复制
 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,你可以使用多态性和依赖注入,但在这种情况下,它可能会被夸大…

票数 3
EN

Stack Overflow用户

发布于 2011-11-17 21:32:14

怎么样

代码语言:javascript
代码运行次数:0
运行
复制
if(condition1 || condition2 || condition3 ||condition4){
    stuff
}

我是不是遗漏了什么?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8167733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档