8

静的ブロックから戻りたい。

return および break ステートメントが機能しないようです。代替手段はありますか。

悪い回避策は、フラグを作成し、フラグをチェックして続行するかどうかを確認することです。

初期化ブロックは計算を行うためのものではなく、クラスのロード中の基本的な初期化のためのものであることを理解しています。

4

5 に答える 5

18

コードをプライベートな静的メソッドに委譲します。

static {
    initialize();
}

private static void initialize() {
    foo();
    if (someCondition) {
        return;
    }
    bar();
}
于 2012-06-20T11:11:22.037 に答える
7

使用する代わりにreturn、条件付きコードをif.

于 2012-06-20T11:09:46.383 に答える
4

静的イニシャライザはビジネスを複雑にする必要がないため、(SESE を購入していなくても) 悪い考えである可能性があります。

リターンを達成するための最小限の方法は、ラベル付きの休憩を使用することです。

static {
    init: {
        ...
           break init;
    }
}

それらは非常にまれであり、通常はネストされたforループに現れます。目新しさは、少し危険なことが起こっていることを読者に知らせるかもしれません.

于 2012-06-20T14:03:56.567 に答える
0

静的初期化ブロックから戻ることはできません。戻るところはありません。しかし、それは必要ないはずです。コードを「単一のエントリ、単一の出口」になるように再構築できるはずです。

于 2012-06-20T11:12:01.500 に答える
0

静的ブロックから戻ることはできませんが、ロジックを実行してブロックに戻る他の関数を使用することをお勧めします。

于 2012-06-20T11:13:18.163 に答える