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

Java交换机在多种情况下使用变量的最佳实践,java,switch-statement,Java,Switch Statement,我想要一个switch语句,如下所示: switch (something) { case 1: int a = 3; ... break; case 2: int a = 4; .... break; } 这不起作用,因为无法在该范围内重新定义。我看到以下选项: 在第二种情况下,只需使用“a=4” 把每个箱子放在支架上 在switch语句之前定义变量 在案例2中使用不同的变量名 这

我想要一个switch语句,如下所示:

switch (something)
{
    case 1:
        int a = 3;
        ...
        break;
    case 2:
        int a = 4;
        ....
        break;
}
这不起作用,因为无法在该范围内重新定义。我看到以下选项:

  • 在第二种情况下,只需使用“a=4”
  • 把每个箱子放在支架上
  • 在switch语句之前定义变量
  • 在案例2中使用不同的变量名
  • 这四个我都不喜欢。这其中哪一个是正确的选择,还是我错过了最好的解决方案


    我看到过这样的问题,它们建议使用大括号,但它们不是关于最好的方法,而是关于如何让它发挥作用。

    大括号是正确的方法。{}创建一个新的作用域,这正是您想要的。

    大括号是正确的方法。{}创建一个新的作用域,这正是您想要的。

    大括号是正确的方法。{}创建一个新的作用域,这正是您想要的。

    大括号是正确的方法。{}创建一个新的作用域,这正是您想要的。

    您也可以使用Map:

    Map<Integer, Integer> caseMap = new HashMap<Integer, Integer>() {{
        put(1, 3);
        put(2, 4);
    }};
    
    int a = caseMap.get(something);
    
    Map caseMap=newhashmap(){{
    put(1,3);
    put(2,4);
    }};
    int a=caseMap.get(某物);
    
    您还可以使用地图:

    Map<Integer, Integer> caseMap = new HashMap<Integer, Integer>() {{
        put(1, 3);
        put(2, 4);
    }};
    
    int a = caseMap.get(something);
    
    Map caseMap=newhashmap(){{
    put(1,3);
    put(2,4);
    }};
    int a=caseMap.get(某物);
    
    您还可以使用地图:

    Map<Integer, Integer> caseMap = new HashMap<Integer, Integer>() {{
        put(1, 3);
        put(2, 4);
    }};
    
    int a = caseMap.get(something);
    
    Map caseMap=newhashmap(){{
    put(1,3);
    put(2,4);
    }};
    int a=caseMap.get(某物);
    
    您还可以使用地图:

    Map<Integer, Integer> caseMap = new HashMap<Integer, Integer>() {{
        put(1, 3);
        put(2, 4);
    }};
    
    int a = caseMap.get(something);
    
    Map caseMap=newhashmap(){{
    put(1,3);
    put(2,4);
    }};
    int a=caseMap.get(某物);
    
    我猜您正在捕获带有illegalstateexception并使用默认块的任何异常

    default:
         doSomething();
         break;
    
    不使用大括号。它还说,如果一个语句没有中断,就应该添加一个完整的注释

    然而,为了可读性和可靠性,任何超过一行的内容都可以用大括号包装,而不会影响性能。大括号告诉编译器创建一个新的作用域,并将代码作为块执行。如果你所做的只是改变,那么这并不是真的必要。如果可以在一行中编写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();
           } 
       } 
     }
    

    我猜您正在捕获任何带有illegalstateexception并使用默认块的异常

    default:
         doSomething();
         break;
    
    不使用大括号。它还说,如果一个语句没有中断,就应该添加一个完整的注释

    然而,为了可读性和可靠性,任何超过一行的内容都可以用大括号包装,而不会影响性能。大括号告诉编译器创建一个新的作用域,并将代码作为块执行。如果你所做的只是改变,那么这并不是真的必要。如果可以在一行中编写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();
           } 
       } 
     }
    

    我猜您正在捕获任何带有illegalstateexception并使用默认块的异常

    default:
         doSomething();
         break;
    
    不使用大括号。它还说,如果一个语句没有中断,就应该添加一个完整的注释

    然而,为了可读性和可靠性,任何超过一行的内容都可以用大括号包装,而不会影响性能。大括号告诉编译器创建一个新的作用域,并将代码作为块执行。如果你所做的只是改变,那么这并不是真的必要。如果可以在一行中编写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();
           } 
       } 
     }
    

    我猜您正在捕获任何带有illegalstateexception并使用默认块的异常

    default:
         doSomething();
         break;
    
    不使用大括号。它还说,如果一个语句没有中断,就应该添加一个完整的注释

    然而,为了可读性和可靠性,任何超过一行的内容都可以用大括号包装,而不会影响性能。大括号告诉编译器创建一个新的作用域,并将代码作为块执行。如果你所做的只是改变,那么这并不是真的必要。如果可以在一行中编写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();
           } 
       } 
     }
    

    在您的代码上下文中,
    开关的作用是什么?还有,你为什么不喜欢这些选项?这是他们让你恼火的事情之一吗?或者你有客观的设计理由吗?在一个完美的世界里,你更喜欢什么?我喜欢上面写的。(像大括号,但不需要添加额外的大括号)我不喜欢4,因为它是一种变通方法,我不喜欢1,因为它更难看到。2和3是我可以接受的,但是n是