我有一个查询,我已经使用了一个方法,但有很多时候我已经使用了If Else ..不会变得非常模糊,请指教我可以使用其他一些条件循环..下面是我的代码.. < / p>
if (cardType == AARP_CARD_TYPE) {
userResponse = messageBox.showMessage("CandidateAARPCardAttachCardToExistingTransaction",
null, IMessageBox.YESNO); // MSG:31.59
transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
WalgreensRewardsConstants.ATTACH_CANDIDATE_AARP_CARD);
} else if ((cardType == PSC_CARD_TYPE) && ((!PosHelper.isRunningAsService()))) {
userResponse = messageBox.showMessage("PendingPSCCardAttachCardToExistingTransaction", null,
IMessageBox.YESNO); // MSG:31.60
transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
WalgreensRewardsConstants.ATTACH_PENDING_PSC_CARD);
} else if ((cardType == DR_CARD_TYPE) && ((!PosHelper.isRunningAsService()))) {
userResponse = messageBox.showMessage("PendingDRCardAttachCardToExistingTransaction", null,
IMessageBox.YESNO); // MSG:31.63
transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
WalgreensRewardsConstants.ATTACH_PENDING_DR_CARD);
} else if ((cardType == WAG_LOYALTY_CARD_TYPE)){
transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
WalgreensRewardsConstants.ATTACH_NOT_ON_FILE);
if((!PosHelper.isRunningAsService())) {
userResponse = messageBox.showMessage("CardNotOnFileToAttach", null, IMessageBox.YESNO); // MSG:31.32
// BUC
// 1.22.1
}
} else { // If the device is neither of these, POS displays Message 1
// Button, MSG 31.14. [BUC
// 1.23.2]
displayMessage("InvalidLoyaltyCard");
transaction.setValue(ITransactionHashtableWag.LOYALTY_MESSAGE_DISPLAYED,
NOT_VALID_LOYALTY_CARD);
userResponse = -1;
}
请告知如何使用其他一些条件语句来改进我的上述逻辑,因为有很多使用If Else ... !!
答案 0 :(得分:6)
如果cardType
是枚举,您可以为枚举添加方法,(例如getName
,getWag
等)并调用它:
userResponse = messageBox.showMessage(cardType.getMessage(), ...
transaction.setValue(cardType.getWag(), cardType.getRewards());
如果是int或其他非枚举类型,您可以使用已经提出的开关,或者考虑将(haha)切换为枚举。你也可以使PosHelper.isRunningAsService()
成为这些方法的布尔参数,所有你的if / else代码将减少到3或4行它似乎(尽管它会引入一些耦合,但你似乎已经有很多了。)
你的枚举可能看起来像这样(简单的例子,你可以根据需要复杂化):
public enum CardType {
AARP_CARD_TYPE {
public String getName() {
return "CandidateAARPCardAttachCardToExistingTransaction";
}
},
PSC_CARD_TYPE {
public String getName() {
return "PendingPSCCardAttachCardToExistingTransaction";
}
};
public abstract String getName();
}
或者更紧凑,如果你在方法中不需要复杂的逻辑:
public static enum CardType {
AARP_CARD_TYPE("CandidateAARPCardAttachCardToExistingTransaction"),
PSC_CARD_TYPE ("PendingPSCCardAttachCardToExistingTransaction");
private final String transactionName;
CardType(String transactionName) {
this.transactionName = transactionName;
}
public String getName() {
return transactionName;
}
}
答案 1 :(得分:3)
改为使用switch
语句。
switch (cardType) {
case AARP_CARD_TYPE:
// blah
break;
case PSC_CARD_TYPE:
// blah
break;
// ...
default:
// default blah
break;
}
答案 2 :(得分:1)
你有一些选择:模式策略,多态或事件,以避免过多ifs / else
在您的示例中,业务逻辑可能接近用户界面。您可以使用MVC概念将逻辑与表示分开,并减少if / elses(如果可能)。
答案 3 :(得分:0)
如果您不希望将方法添加到CardType
建议的assylias,则可以创建“操作”枚举并将方法添加到该方法并使用{{1} }