【问题标题】:Re-factoring the usage of same switch-case multiple time多次重构相同开关盒的使用
【发布时间】:2013-06-16 12:40:32
【问题描述】:

在一个类中,我有以下 switch-case:

switch(articleStep.getDeveloper()) {
    case CENTRAL:
        switch(articleStep.getArticleType()) {
            case POSM:
                //some code
                break;

            case PROMOTION_PACK:
                //some code
                break;
        }
        break;

    case LOCAL:
        //some code
        break;
}

在多种方法中。它们之间只有内部操作不同(//some code)。

是否有任何替代方法可以将 switch-case 放置在一个方法中,我将通过将操作作为参数传递来调用该方法,它会做同样的工作吗?


用法-1

switch(articleStep.getDeveloper()) {
    case CENTRAL:
        switch(articleStep.getArticleType()) {
            case POSM:
                centralPOSMArticle = new AddManageArticleInDTO<ManageCentralPOSMArticleInDTO>();                
                centralPOSMArticle.setManageArticle(new ManageCentralPOSMArticleInDTO());
                setMandetoryParameterToAddManageArticleInDTO(centralPOSMArticle);
                break;

            case PROMOTION_PACK:
                centralPromotionPackArticle = new AddManageArticleInDTO<ManageCentralPromotionPackArticleInDTO>();                
                centralPromotionPackArticle.setManageArticle(new ManageCentralPromotionPackArticleInDTO());
                setMandetoryParameterToAddManageArticleInDTO(centralPromotionPackArticle);
                break;
        }
        break;

    case LOCAL:

        break;
}

用法2

switch(articleStep.getDeveloper()) {
    case CENTRAL:
        switch(articleStep.getArticleType()) {
            case POSM:
                genericDTO = centralPOSMArticle.getManageArticle();
                break;

            case PROMOTION_PACK:
                genericDTO = centralPromotionPackArticle.getManageArticle();
                break;
        }

        break;

    case LOCAL:

        break;
}

我总共有七个地方使用过这种类型的开关盒。

【问题讨论】:

  • 取决于你的 // some code 做什么。
  • @fge 我添加了两个switch-case的用法,请看更新。
  • 在您的示例中,genericDTO 的范围是否包括调用代码?

标签: java refactoring switch-statement


【解决方案1】:

你会发现你的想法很不可行,但一个好的方法是在你的枚举中定义方法并依靠动态调度来完成你的 switch 语句的工作。

【讨论】:

  • 感谢您的回答。您能否详细说明“动态调度以完成您的 switch 语句的工作”?
  • 枚举类不在我手中。我无法在该枚举中添加方法。
  • 好吧,如果它不在您的控制范围内,那么这将不起作用。动态方法分派本质上是对象类型的 switch 语句。
猜你喜欢
  • 1970-01-01
  • 2021-06-04
  • 1970-01-01
  • 2019-09-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
  • 2017-02-04
  • 1970-01-01
相关资源
最近更新 更多