java - 为什么不同的案例条件体不在不同的范围内?

标签 java switch-statement

为什么不同的 case body 不会自动在它们自己的范围内?例如,如果我要这样做:

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;
}

编译器会提示局部变量重新定义。我知道我可以这样做:

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;
  }
}

在要执行的每组语句周围放置一个 block ,以将每个 account 变量放在其自己的范围内。但为什么语言不为我做这件事?

为什么要在 CONDITION_ONE 的主体中声明一个局部变量,然后在 CONDITION_TWO 的主体中使用它?这似乎是一个糟糕的想法,应该明确禁止,而不是默许。

最佳答案

你为什么想要这个?如果每个 case block 都需要一个新的范围,那么您在 case block 中做的太多了。把它推到一个方法上。

关于java - 为什么不同的案例条件体不在不同的范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3585073/

相关文章:

java - 坐标点在jmapviewer多边形中?

java - 我的代码抛出 java.lang.IllegalMonitorStateException

Java 添加格式为 dd :HH:mm:ss 的日期

c# - 带 or 的 CSharp 开关表达式和带条件的默认保护

python - 如何使用存储在变量中的值作为案例模式?

c++ - 尝试使用 switch 和 if 语句创建日历来检查用户输入然后输出日期

switch-statement - 我的伪代码与我的 UML 事件图匹配吗?

java - EclipseLink JPA `@PreUpdate` 调用不持久

android - 如何在 Android 中更改 Switch 的高度和宽度

java - 如何在 Android 中的 ExpandableListView 中禁用子分隔符