可以在switch语句中使用throw而不是break吗?

Jer*_*rry 8 java oop exception throw

可以抛出也可以用来退出switch语句而不使用break关键字吗?为什么要使用投掷而不是休息?

switch(number)
{
    case 1:
        throw new RuntimeException("Exception number 1");
    case 2:     
        throw new RuntimeException("Exception number 2"); 
}
Run Code Online (Sandbox Code Playgroud)

Mak*_*oto 12

在两种情况下,您可以使用a throw来中断交换机的流量:

  1. 流量控制 ; 一般来说,这是一种不好的做法 - 您不希望出现特殊行为来决定您的计划下一步决定去哪里.

  2. 不太可能但似乎合理的默认情况 ; 如果你打在达到预设的条件应该是不可能,却发生了.不知何故.不可思议的.或者,如果您有严格的编码标准,则要求switch语句具有默认情况.

    例:

    public class Test {
        public static enum Example {
            FIRST_CASE,
            SECOND_CASE;
        }
        public void printSwitch(Example theExampleCase) {
            switch(theExampleCase) {
                case FIRST_CASE:
                    System.out.println("First");
                    break;
                case SECOND_CASE:
                    System.out.println("Second");
                    break;
                default:  // should be unreachable!
                    throw new IllegalStateException(
             "Server responded with 724 - This line should be unreachable");
         }
    }
    
    Run Code Online (Sandbox Code Playgroud)


Alp*_*iya 1

throw您可以在块中使用switch,但这不是良好的编码/设计实践。throw旨在控制代码中的异常/错误情况,而不是控制指令的执行。

尽管您可以throw在 中使用switch,但我建议不要在 中使用它switch。:)