2

私はEclipseを持っています.初期化されていないオブジェクトがnullに等しいかどうかを確認しようとすると、「xが初期化されていない可能性があります」というエラーが表示され、動作するはずです。

私が意味するものの例:

      Object obj;
      System.out.println(obj==null ? "no value":"has a value");

コンパイルされず、「obj が初期化されていない可能性があります」と表示されます。Eclipse でコンパイラの設定を変更してこれを修正するにはどうすればよいですか?

4

5 に答える 5

3

これを修正するためにEclipseでコンパイラ設定を変更するにはどうすればよいですか?

できません。Java言語仕様では、これをコンパイルエラーとして扱うために、準拠したJavaコンパイラが必要です。

このルールに違反するようなEclipseコンパイラ設定はありません。

(仮に)そのような設定があったとしても、JVMがバイトコードファイルをロードしようとすると、バイトコードファイルの検証に失敗すると思います。(何らかの方法でJVMをだまして、初期化されていないローカル変数の値を使用させることができれば、ランタイムタイプのセキュリティが損なわれ、JVMのクラッシュが発生します...さらに悪いことになります。)


objがローカル変数ではなくインスタンス変数である場合、デフォルトで初期化されnull、コンパイルエラーは発生しません。ただし、ローカル変数はデフォルトでは初期化されません。

于 2012-12-15T04:47:58.147 に答える
2

これを修正するためにEclipseのコンパイラ設定を変更するのではなく、変数を初期化するだけですobj

      Object obj = null;
      System.out.println(obj==null ? "no value":"has a value");

Java仕様4.12.5から-変数の初期値

ローカル変数(§14.4、§14.14)は、明確な割り当て(§ 16)。

初期化しないことに本当に熱心な場合objは、ローカル変数ではなくクラスのメンバーにする必要があります。次に、デフォルトの初期値が設定されます(ここでも、Java仕様4.12.5-変数の初期値を参照してください) 。

public class Example {

    private static Object obj;

    public static void main(String[] argv) throws Exception {
        System.out.println(obj==null ? "no value":"has a value");
    }

}

...しかし、内部ではまだ初期化されています。

于 2012-12-15T04:43:55.670 に答える
1

これはローカル変数です。次のように初期化する必要があります。

Object obj = null;

クラスとオブジェクト、および配列の特定のフィールドは、有用なデフォルトに暗黙的に初期化される場合がありますが、ローカル変数の場合はそうではありません。

のセクション16.2.4Local variable declaration statementsJLS7は、これを理解したい場合に読むセクションですが、理解するには時間がかかります。かなり鈍感です:-)

16セクション(Definite Assignment)の先頭から始めて、そこから作業を進めていくとよいでしょう。その最初の部分には、ここで最も適切な2つの段落があります(強調のための私のイタリック体):

ローカル変数または空白finalフィールドXへのアクセスごとに、アクセス前に確実に割り当てるX 必要があります。そうしないと、コンパイル時エラーが発生します。

このような代入は、変数の単純な名前(または、フィールドの場合は、で修飾されたその単純な名前)が代入演算子の左側にある場合にのみ発生するように定義されています。this

于 2012-12-15T04:44:38.603 に答える
1

すべてのローカル変数は最初に読み取る前に初期化する必要があるという規則があるため、コンパイラはエラーを表示します。したがって、最初にローカル変数を初期化せずに宣言し、後で初期化してから使用します。

Object obj = null;

 System.out.println(obj==null ? "no value":"has a value");
于 2012-12-15T04:47:08.997 に答える
0

これを修正するために Eclipse でコンパイラの設定を変更するにはどうすればよいですか?

解決策は、コードを修正することです。このエラーの目的は、バグを検出して防止することです。壊れたコードをコンパイルできるようにすることは、通常、非常に悪い考えです。

于 2012-12-15T09:04:19.543 に答える