[英]Java - Uninitialized final variable of an Enum can be assigned without producing error?
所以我正在清理我的代碼並將final
關鍵字添加到任何可能的地方,其中一個地方恰好是enum
類型的未初始化變量。
該變量未初始化,因為它的值需要由switch
語句確定。 在這種情況下,將這個變量設為final
是沒有意義的,但無論如何我還是意外地做到了,並發現代碼可以正常工作而不會產生任何錯誤。
據我了解,Java 中的未初始化變量將保持默認值(在這種情況下,我認為應該是null
),並且最終變量不能重新分配給不同的 ZA8CFDE6331BD59EB26696F89111C4。
為什么這段代碼不會產生任何錯誤或副作用?
筆記:
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
賦值,要么拋出異常(在這種情況下,局部變量超出范圍)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.