Java if语句有2个条件和公共代码

时间:2015-03-24 19:16:36

标签: java if-statement multiple-conditions

我有2个条件要检查,如果一个条件为真,我需要执行一些代码,如果另一个条件为真,我需要执行一些不同的代码。但是,如果 为真,除了特定代码之外,我还需要执行一段通用代码。

请注意,只有两个条件中的一个可以为真,而不是两个。

所以,我可以用3种方式做到这一点:

方法1

if (condition1 || condition2){

    //common code here
    commonCode();
    moreCommonCode();

    //Dig a bit deeper to see which one was true
    if (condition1){

        //Carry out some code here specific to condition1
        specificToCondition1();
        moreCondition1Stuff();

    }

    else {

        //Carry out some code here specific to condition2
        specificToCondition2();
        moreCondition2Stuff();

    }

}

方法2

if (condition1){

   specificToCondition1();
   moreCondition1Stuff();

}

else if (condition2){
    specificToCondition2();
    moreCondition2Stuff();

}

if (condition1 || condition2){

    commonCode();
    moreCommonCode();

}

方法3

if (condition1){

    specificToCondition1();
    moreCondition1Stuff();
    commonCode();
    moreCommonCode();

}

else if (condition2){

    specificToCondition2();
    moreCondition2Stuff();
    commonCode();
    moreCommonCode();

 }

方法1 方法2 中,我需要检查两次条件。

方法3 中,我必须复制公共代码。

我错过了什么,有没有办法做到这一点,我必须复制代码或检查条件两次?

3 个答案:

答案 0 :(得分:1)

方法4 (使用公共部分的私有方法)

所以除了调用常用方法之外,你不会有代码重复。

if (condition1) {
  specificToCondition1();
  moreCondition1Stuff();
  execCond1AndCond2Stuff();
}
else if (condition2) {
  specificToCondition2();
  moreCondition2Stuff();
  execCond1AndCond2Stuff();
}

void execCond1AndCond2Stuff() {
  commonCode();
  moreCommonCode();
}

答案 1 :(得分:0)

bolean isSet = false;
if (condition1){ 
    specificToCondition1();       
    moreCondition1Stuff();
    isSet = true; 
} else if (condition2){  
    specificToCondition2();        
    moreCondition2Stuff(); 
    isSet = true;
}
if(isSet) {
     commonCode(); 
     moreCommonCode();
 }

答案 2 :(得分:0)

您可以使用继承,具体取决于实际代码的外观。这是我思考的一个例子。虽然有更多的样板代码......

package com.stackoverflow.condition;

public abstract class AbstractCase {

    public void doLogic() {
        // Some common logic
        doSpecificLogic();
    }

    abstract void doSpecificLogic();
}

package com.stackoverflow.condition;

public class CaseOne extends AbstractCase {
    @Override
    protected void doSpecificLogic() {
        // Specific logic
    }
}

package com.stackoverflow.condition;

public class CaseTwo extends AbstractCase {
    @Override
    protected void doSpecificLogic() {
        // Specific logic
    }
}

package com.stackoverflow.condition;

public class CaseFactory {

    public static AbstractCase getCase(boolean caseOne) {
        return caseOne ? new CaseOne() : new CaseTwo();
    }
}

package com.stackoverflow.condition;

public class Implementation {

    public static void main(String... args) {
        CaseFactory.getCase(true).doLogic();
    }
}