所以我正在清理代码,并将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);
}
}
默认情况下,局部变量不初始化,只有字段初始化。
在所有可能的情况下,您的代码要么为edgePosition
赋值,要么抛出异常(在这种情况下,局部变量超出范围(。