【发布时间】:2022-09-25 16:58:20
【问题描述】:
所以我正在清理我的代码并将final 关键字添加到任何可能的位置,其中一个位置恰好是enum 类型的未初始化变量。
该变量未初始化,因为它的值需要由switch 语句确定。在这种情况下,将这个变量设置为final 是没有意义的,但无论如何我还是意外地这样做了,并且发现代码可以正常工作而不会产生任何错误。
据我了解,Java 中未初始化的变量将保持默认值(在这种情况下我认为应该是null),并且最终变量不能重新分配给不同的对象。
为什么这段代码不会产生任何错误或副作用?
笔记:
-
NeighborPosition是枚举类型
final NeighborPosition edgePosition;
switch(cornerPosition) {
case ONE:
edgePosition = NeighborPosition.THREE;
break;
case TWO:
edgePosition = NeighborPosition.FOUR;
break;
case THREE:
edgePosition = NeighborPosition.FIVE;
break;
case FOUR:
edgePosition = NeighborPosition.SIX;
break;
case FIVE:
edgePosition = NeighborPosition.ONE;
break;
case SIX:
edgePosition = NeighborPosition.TWO;
break;
case ZERO:
default: {
throw new IllegalStateException(
\"Should never reach this corner, current corner: \"
+ cornerPosition);
}
}
-
\"Java 中未初始化的变量将保持默认值\" <- 这仅适用于类字段。局部变量没有默认值。
-
没有错误,因为您的开关将为每个可能的流分配一个值或引发异常。
-
感谢@OHGODSPIDERS 的解释,我认为这是我困惑的最大原因。
标签: java enums variable-assignment final