Java / C ++:可能在交换机中有多个案例的通用代码吗?

时间:2014-04-18 10:42:52

标签: java c++

我发现自己经常遇到这种情况,并且想知道是否存在Java或C ++或任何其他语言的方式,允许您执行交换机中多个case语句通用的代码,但也专门用于个别案例,例如:

switch(var)
{
   case Preceeding:
   {
       // code executed for both FollowingA and FollowingB
   }
   break;
   case FollowingA:
   {
       // code executed for only FollowingA
   }
   break;
   case FollowingB:
   {
       // code executed for only FollowingB
   }
   break;
}

而不是必须这样做:

switch(var)
{
    case FollowingA:
    case FollowingB:
    {
        // code executed for FollowingA and FollowingB
        switch(var)
        {
            case FollowingA:
            {
                // code executed for FollowingA
            }
            break;
            case FollowingB:
            {
                // code executed for FollowingB
            }
            break;
        }
    }
    break;
}

2 个答案:

答案 0 :(得分:4)

这实际上取决于你想要做什么 - 不只是来自"你能做到这一点吗?#34;透视,但您还必须关心您或其他人以后必须阅读和理解代码的事实。

我通常会发现,如果有一些事情需要在一个以上的开关情况下完成,它应该进入一个函数(如果它足够小,大多数编译器会内联这些代码,所以那里没有性能损失)。

所以:

 void CommonCode()
 {
    ... 
 }

 switch(var)
 {
    case A:
       CommonCode();
       ... 
       break;
    case B:
       CommonCode();
       ...
       break;
 }

然而,这个问题有很多不同的解决方案,它确实应该遵循"你的代码所做的是什么意思"这应该指导你如何解决这个问题。编写清晰的代码是主要目标。如果这不起作用,请以不同方式设计代码。      }

答案 1 :(得分:0)

var的值可以是PrecedingFollowingAFollowingB,因此在这种情况下使用switch是错误的。您可以在switch语句之前执行公共代码,或者如果您仍然希望这样做,请尝试以下操作:

switch(var)
{
   case Preceeding:
   {
       // code executed for both FollowingA and FollowingB
   } // no break here
   case FollowingA:
   {
       // code executed for only FollowingA
   }
   break;
   case FollowingB:
   {
       // code executed for only FollowingB
   }
   break;
}