文ラベルのスコープ

自分めも。

ラベルのスコープはけっこう特殊。

public static void hoge() {
    L1 : {}
    L1 : {}
}

上記のように並列してもOK。

下記のように直列するとNG。

public static void seq() {
    L1 : L1: {}
}

LABEL : STATEMENT のSTATEMENTの部分がスコープらしい。下記も重複してNG。

public static void inner() {
    L1 : { L1 : {} }
}

確かにこれなら、break, continueで下記のような記法はスコープ外になるので余計なことを考えないで済む。

public static void outer() {
    L1 : for (int i = 0; i < 10; i++) {
        
    }
    L2 : for (int i = 0; i < 10; i++) {
        break L1; // L1はスコープ外
    }
}

gotoが前提じゃないラベルだと、こんな仕様でもいいのかと関心しました。