java - 过度使用 If else 语句

标签 java

我有一个查询,即我使用了一种方法,但我多次使用 If Else ..不是它变得非常模糊,请建议我也可以使用其他条件循环..下面是我的代码..

 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;
    }

请告诉我如何使用其他一些条件语句来改进我的上述逻辑,因为使用了很多n很多If Else..!!

最佳答案

如果 cardType 是一个枚举,您可以向枚举添加方法(例如 getNamegetWag 等)并调用它:

userResponse = messageBox.showMessage(cardType.getMessage(), ...
transaction.setValue(cardType.getWag(), cardType.getRewards());

如果它是 int 或其他非枚举类型,您可以使用已经建议的开关,或者考虑切换(哈哈)到枚举。您还可以将 PosHelper.isRunningAsService() 设为这些方法的 boolean 参数,并且看起来您的所有 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;
        }
    }

关于java - 过度使用 If else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10724506/

相关文章:

java - Java HTTP 服务器错误 : Unexpected end of file from server

java - 不使用递归的二叉树分支求和

java - 在 Jersey 中返回 XML/JSON

java - 如何在 Swing 组件中显示 Flash 动画?

java - JFrame 最小化后不会重新最大化

java - 当我使用 glassfish 在 netbeans 上部署我的项目时,为什么 tomcat 正在运行?

java - 是否可以使用非默认构造函数的 Jackson 自定义解串器?

java - 将 Xtext 与 StringTemplate 代码生成器链接起来

java - 找不到如何对这个数字模式进行编程

java - HTMLUnit 使用 JavaScript 代码执行表单