0

Javaでこの奇妙なことに出くわしました。コーディング中に、Map をインスタンス化するのをうっかり忘れてしまいました。データを入れている間はすべてエラーがありませんでしたが、データを取得すると明らかな NullPointerException が発生しました。これが私が使用したコードスニペットです:

public class Loader {
   private static Map<String, Object> map;
   public static load() {
       //...
       // read lines and put them into map
       map.put(line, new Object()); // <-- NO ERROR
       //...
   }

   public static parse(){
       //...
       for(...){
           map.get(key); //<-- ERROR on map (NullPointerException)
       }
       //...
   }
}

提供されるコードはスタブです。主な目的は、奇妙なマップの動作を示すことです。では、なぜ null にデータを挿入できるのでしょうか? Java *1.6.0_29* を使用しています。

このコードは完全であることに注意してください。マップは他の場所では初期化されていません。コードが完成しました。

4

5 に答える 5

0

使用しているIDEまたはJDKに問題があるか、コードである可能性があります.あなたのケースを再現しようとすると、コンパイル時にjava.lang.Error例外がスローされ、ローカル変数マップがそうではないというメッセージが表示されるためです.初期化されました。

于 2012-08-14T13:54:17.050 に答える
0

簡単に言えば、これはできません。代わりに、中にスローされた例外がどこかmap.put()飲み込まれていて、それが表示されていないと思われます。

例えば

try {
    (new Loader).load();
}
catch (Exception e) {
   // swallowed with no info here
}
于 2012-08-14T13:03:21.027 に答える
0

このコードは完全ではありません... または、以前にコンパイルされたバージョンのコードを実行している可能性があります。

于 2012-08-14T13:03:49.557 に答える
0

「map」がインスタンス化されているか、「put」行に到達できません。

于 2012-08-14T18:48:40.473 に答える
0

私はばかげていると感じます。@assylias が指摘したように、プットが発生するコードは決して実行されません。以前のバグが原因で実行されていなかった for-each サイクルが非常に深くなりました。私は恥ずかしいと思います。

于 2012-08-14T13:22:54.130 に答える