簡體   English   中英

Java - 可以分配枚舉的未初始化的最終變量而不會產生錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM