次のコードがあります...
import java.util.Random;
public class ThreeArgumentOperator {
private static final Random RANDOM = new Random();
public static void main(String[] args) {
String test;
System.out.println(test = getValue() == null ? "" : test);
}
public static String getValue() {
if (RANDOM.nextBoolean()) {
return "";
} else {
return null;
}
}
}
Eclipseコンパイラー(私はJunoを使用しています)は次のエラーを報告します:
ローカル変数テストが初期化されていない可能性があります
私の質問は次のとおりです。この場合、コンパイラは変換できないことを報告するべきではありませんboolean
かString
?==
演算子が優先されることを理解している=
ため、コンパイラはキャストについて文句を言う必要があります。代わりに、値が初期化されていない可能性について文句を言います。
次の行を変更すると
System.out.println(test = getValue() == null ? "" : test);
に
System.out.println((test = getValue()) == null ? "" : test);
すべてが正常に動作します。
javac
編集:私はまた、直接使用してそれをコンパイルしようとしました。同じエラーが発生します。
error: variable test might not have been initialized
System.out.println(test = getValue() == null ? "" : test);