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