我如何才能使这段代码更好

时间:2013-04-10 11:33:28

标签: java loops if-statement

我有像

这样的字段
  

变量1,变量2,variable3 ....等

我的条件是

if(variable1 != null && variable1 != 0 )
  myobject.setFirstValue(variable1);

if(variable2 != null && variable2 != 0 )
 myobject.setSecondValue(variable2);

if(variable3 != null && variable3 != 0 )
 myobject.setThirdValue(variable3);

像这样,我有近15个志愿者。有没有办法以简单的方式编写所有这些条件。变量名称与我发布的不完全相同。它们与我发布的不同。

6 个答案:

答案 0 :(得分:5)

你可以从...开始......

if (notNullOrZer0(variable1)) {
   ...
}

private boolean notNullOrZero(Integer x) {
    return x != null && x != 0;
}

然后可能将所有这些变量放在List<Integer>中...这取决于代码的其余部分的结构......

答案 1 :(得分:5)

你可以创建一个方法isNotNullorequalsZero,它检查不为空而不等于零

private boolean isNotNullorequalsZero(Integer value){
     return value != null && value != 0;
}

你用它 -

if(isNotNullorequalsZero(variable1) )
  myobject.setFirstValue(variable1);

if(isNotNullorequalsZero(variable2) )
 myobject.setFirstValue(variable2);

if(isNotNullorequalsZero(variable3) )
 myobject.setFirstValue(variable3);

答案 2 :(得分:0)

您可以将所有变量放入数组中并使用for循环检查条件并设置myobject.setFirstValue(array[index]);

中的值

答案 3 :(得分:0)

setFirstValue方法修改为

void setFirstValue(Integer var){
if(var !=null && var !=0) {
//current logic of setFirstValue
}
}

或者如果无法修改它,请创建一个包装器调用(返回类型布尔值,以便在调用失败时通知用户

boolean checkAndSetFirstValue(Integer var) {
    if(var !=null && var !=0){
        setFirstValue(var);
        return true;
    }
    return false;
}

答案 4 :(得分:0)

你可以创建一个名为copyIfNonZero之类的方法,它可能看起来像这样:

public void copyIfNonZero(MyObject myObject, Integer value) {
    if (value != null && value != 0) {
        myObject.setFirstValue(value);
    }
}

目前的代码将缩减为

copyIfNonZero(myobject, variable1);
copyIfNonZero(myobject, variable2);
copyIfNonZero(myobject, variable3);
...

甚至将变量放在Collection中并迭代:

Collection<Integer> values = .....
for(Integer value : values) {
    copyIfNonZero(myObject, value);
}

答案 5 :(得分:0)

如果这是您的代码中经常发生的事情,并且您想要封装此行为并避免重复它,我会做类似的事情:

在tools或utils类中,创建一个静态方法:

public static void setPropertyIfNonNullNorZero(Object target, String propertyName, Integer value){

    //use some reflection tooling here, or write the whole thing yourself... I am  using commons.beanutils here

    if(value != null && value != 0){
        BeanUtils.setProperty(target, propertyName, value);
    }

}

此代码假定您的目标对象(myObject)尊重bean约定(基本上是一致的getter和setter命名),并且该值始终为Integer。

然后像这样使用它:

Tools.setPropertyIfNonNullNorZero(myobject, "thirdValue", variable3);