これは、コンパイラがローカル変数k
のInitializerエラーをチェックする場合の変数の明確な割り当てを参照しています。どんなflag
変数の値は、k
変数の値が割り当てられることになる以下のシナリオで変数の確定的な割り当て
k
needs to be initialized.
:
void flow(boolean flag) {
int k;
if (flag)
k = 3;
if (!flag)
k = 4;
System.out.println(k);
}
コードのこの部分は、コンパイルエラーをスローしません。ここでコンパイルエラーが正当化されていますか?
コンパイラは、「else」を使用しないと両方のフラグ条件をチェックしたことを知るのに十分スマートではありません。 'else'を使います。 –
もっと良い質問は、このコードは正当なものですか?ブール値の両側を明示的にチェックするのはなぜですか? – shmosel
はるかに良いバージョンは 'final int k = flag? 3:4; '5行ではなく1行で、分かりやすいように、変数' k'は不変です。 – vanje