我有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 中,我必须复制公共代码。
我错过了什么,有没有办法做到这一点,我必须复制代码或检查条件两次?
答案 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();
}
}