2012-06-20 9 views
7

静的ブロックから戻したい。Javaの静的初期化ブロックから戻す方法

returnとbreak文のように見えません。何か別の方法はありますか?

私は、フラグを作成して、フラグをチェックして続行するかどうかを確認することができます。

私は、初期化ブロックは計算を行うためのものではなく、クラスの読み込み中の基本的な初期化だけを理解しています。

+3

ソースコードを提供してください –

+0

私はこの問題を理解できません。明確に説明するか、わかりやすいようにコードを記入してください。 –

+1

@Kalai彼は、イニシャライザブロック内では 'return'を使うことができないことを意味すると思います。 JLS 14.17: "[...] returnイミディエイトがインスタンスイニシャライザまたは静的イニシャライザ[...]に含まれている場合、コンパイル時エラーです。 –

答えて

7

returnの代わりに、ifで条件コードをラップするだけです。

18

委任プライベート静的メソッドへのコード:

static { 
    initialize(); 
} 

private static void initialize() { 
    foo(); 
    if (someCondition) { 
     return; 
    } 
    bar(); 
} 
+0

イニアル化ブロックを記述するクリーナです。 –

0

あなたは、静的初期化子ブロックから返すことはできません。戻ってくる場所はありません。しかし、それは必要ではありません。コードを "単一エントリ、単一出口"に再構成できるはずです。

+0

私はこの声明に同意しなければならないでしょう、それはまた、よりクリーンな(そして読みやすい)コードを提供するでしょう。 – Anders

0

静的ブロックから戻ることはできませんが、ロジックを実行してブロックに戻る他の機能を使用する方が良いです。

1

静的イニシャライザはビジネスが複雑でないため、(SESEを購入しなくても)おそらく悪い考えです。

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

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

彼らは一般的に、ネストされたループforに登場する、非常にまれです。このノベルティは、少しばかげたことが起こっているということを読者に知らせるかもしれない。

関連する問題