Java Switch在多种情况下使用变量的最佳实践

时间:2013-12-07 18:21:10

标签: java switch-statement

我想要一个如下所示的开关语句:

switch (something)
{
    case 1:
        int a = 3;
        ...
        break;
    case 2:
        int a = 4;
        ....
        break;
}

这不起作用,因为无法在该范围内重新定义。我看到以下选项:

  1. 在案例2中使用“a = 4”
  2. 将每个案例放在大括号中
  3. 在switch语句之前定义变量
  4. 在案例2中使用不同的变量名称
  5. 我真的不喜欢这四个中的任何一个。哪一个是要走的路,或者我错过了最好的解决方案?

    我看到了像one这样的问题,建议使用大括号,但它们并不是最好的方法,而是要让它完全发挥作用。

3 个答案:

答案 0 :(得分:2)

我猜你正在使用illegalstateexception并使用默认块来捕获任何异常。

default:
     doSomething();
     break;

oracle style guide不使用大括号。它还说,只要声明没有中断,就应该添加评论。

但是,为了便于阅读和提高可靠性,任何具有多行的内容都可以用大括号包裹而不会降低性能。大括号告诉编译器创建一个新范围并将该代码作为一个块执行。如果你所做的只是改变一个,那么它就没有必要了。如果您可以在没有大括号的一行上编写switch case语句,请执行此操作。 java中的许多内容都不在一行实例中包括if语句。

接下来,您可以重新定义需要在switch语句之外的语句中重用或设置的任何变量。这将是最小化整数持续实例化的最佳实践。

如果有多行,你应该尝试制作一些方法,然后使用:

int a=0;

switch (something)
{
    case 1:{
        a = 3;
        ...
        break;
     }
     case 2:{
        a = 4;
        ....
       break;
    }
    default:
    {
       try{
           throw new IllegalStateException();
       }catch(IllegalStateException e)
       {
           e.printStackTrace();
       } 
   } 
 }

答案 1 :(得分:1)

支撑是正确的方法。 {}创建一个新的范围,这正是你想要的。

答案 2 :(得分:0)

您也可以使用Map:

Map<Integer, Integer> caseMap = new HashMap<Integer, Integer>() {{
    put(1, 3);
    put(2, 4);
}};

int a = caseMap.get(something);