为什么不同的案件条件机构不在不同的范围内?

Tom*_*sky 6 java switch-statement

为什么不同的案例机构不会自动在自己的范围内?例如,如果我这样做:

switch(condition) {
  case CONDITION_ONE:
    int account = 27373;
  case CONDITION_TWO:
    // account var not needed here
  case CONDITION_THREE:
    // account var not needed here
  case CONDITION_FOUR:
    int account = 90384;
}
Run Code Online (Sandbox Code Playgroud)

编译器会抱怨局部变量重定义.我明白我可以这样做:

switch(condition) {
  case CONDITION_ONE: {
    int account = 27373;
  }
  case CONDITION_TWO: {
    // account var not needed here
  }
  case CONDITION_THREE: {
    // account var not needed here
  }
  case CONDITION_FOUR: {
    int account = 90384;
  }
}
Run Code Online (Sandbox Code Playgroud)

在每个要执行的语句集周围放置一个块,将每个account变量放在自己的范围内.但是为什么语言不能为我做这个呢?

你为什么要在CONDITION_ONE体内声明一个局部变量然后在CONDITION_TWO's中使用它?这似乎是一个可怕的想法,应该明确禁止,而不是暗示允许.

Ran*_*pho 6

你为什么这个?如果您需要为每个案例块设置一个新范围,那么您在案例块中做的太多了.将其推送到方法.


eri*_*son 5

这与语言的其他部分不一致.

实际上,范围总是由块决定.这种一致性使Java更易于阅读和维护.